2013-10-24 1 views
0

나는 안드로이드 개발과 stackoverflow에 새로운 브랜드이므로 제발 쉽게 가보겠습니다. ;)String이 TextView를 사용하여 예상 한 문자열 일 때

여러 개의 TextView가 포함 된 ViewGroup을 만들었습니다. 특히 케이스 상수가 내 Java 객체에 정의 된 정수인 스위치 케이스가 있습니다. 그런 다음 케이스 문을 String 값으로 생각하는 것으로 설정합니다. 마지막으로 setText() 메서드를 사용하여 TextView 객체를이 String으로 설정합니다. 내가 겪고있는 문제는 실제로보기로 반환되는 것은 텍스트 값이 아닌 대소 문자와 관련된 정수입니다. 이것은 내가 TextView에 전달하는 것이 int임을 믿게하지만, 나는 이것을 어떻게 수정할 수 있는지 보지 못한다.

도움을 주시면 감사하겠습니다.

뷰 그룹 코드는 여기에 있습니다 :

public View getView (int position, View convertView, ViewGroup parent) 
    { 
     ViewGroup listItem; 
     if (convertView == null) { 
      listItem = (ViewGroup) getLayoutInflator().inflate(R.layout.list_item, null); 
     } 
     else { 
      listItem = (ViewGroup) convertView; 
     } 
     MovieInfo movieInfo = list.get(position); 
     TextView movietitleText = (TextView) listItem.findViewById(R.id.movietitle_text); 
     TextView directorText = (TextView) listItem.findViewById(R.id.director_text); 
     TextView producerText = (TextView) listItem.findViewById(R.id.producer_text); 
     TextView releaseyearText = (TextView) listItem.findViewById(R.id.releaseyear_text); 
     TextView genreText = (TextView) listItem.findViewById(R.id.genre_text); 

     movietitleText.setText(movieInfo.getMovietitle()); 
     producerText.setText(movieInfo.getProducer()); 
     directorText.setText(movieInfo.getDirector()); 
     releaseyearText.setText(movieInfo.getReleaseyear()); 

     String genreName; 
     Resources resources = context.getResources(); 
     switch (movieInfo.getGenre()) { 
     case MovieInfo.GENRE_ACTION: 
      genreName = resources.getString(R.string.action_label); 
      break; 
     case MovieInfo.GENRE_COMEDY: 
      genreName = resources.getString(R.string.comedy_label); 
      break; 
     case MovieInfo.GENRE_DRAMA: 
      genreName = resources.getString(R.string.drama_label); 
      break; 
     case MovieInfo.GENRE_FAMILY: 
      genreName = resources.getString(R.string.family_label); 
      break; 
     case MovieInfo.GENRE_HORROR: 
      genreName = resources.getString(R.string.horror_label); 
      break; 
     case MovieInfo.GENRE_ROMANCE: 
      genreName = resources.getString(R.string.romance_label); 
      break; 
     default: 
     case MovieInfo.GENRE_UNKNOWN: 
      genreName = resources.getString(R.string.unknown_label); 
      break; 
     } 
     genreText.setText(genreName); 
     return listItem; 
    } 

상수 내 자바 여기 객체에 정의 된 경우 : 체크 상자를 선택하면

public static final int GENRE_UNKNOWN = 0; 
public static final int GENRE_ACTION = 1; 
public static final int GENRE_COMEDY = 2; 
public static final int GENRE_DRAMA = 3; 
public static final int GENRE_FAMILY = 4; 
public static final int GENRE_HORROR = 5; 
public static final int GENRE_ROMANCE = 6; 

private String movietitle; 
private String director; 
private String producer; 
private String releaseyear; 
private int genre; 

그리고 장르를 설정하는 작업이에 여기서 주요 활성 여기 strings.xml의

if (actionCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_ACTION); 
if (comedyCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_COMEDY); 
if (dramaCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_DRAMA); 
if (familyCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_FAMILY); 
if (horrorCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_HORROR); 
if (romanceCheckBox.isChecked()) movieInfo.setGenre(MovieInfo.GENRE_ROMANCE); 

비중 :

<string name="movietitle_label">Movie Title</string> 
<string name="director_label">Director</string> 
<string name="producer_label">Producer</string> 
<string name="releaseyear_label">Release Year</string> 
<string name="genre_label">Genre</string> 
<string name="action_label">Action</string> 
<string name="comedy_label">Comedy</string> 
<string name="drama_label">Drama</string> 
<string name="family_label">Family</string> 
<string name="horror_label">Horror</string> 
<string name="romance_label">Romance</string> 
<string name="unknown_label">Unknown</string> 
<string name="ok_label">OK</string> 
<string name="clear_label">Clear</string> 
<string name="showdatabase_label">Show Database</string> 
<string name="id_label">ID</string> 
<string name="select">Select Year</string> 

도움 주셔서 감사합니다.

+1

내가 예를 들어 R.string.action_label 정말 문자열과 숫자가 아닌 경우 확인하려면 리소스 파일을 확인합니다. – Marcelo

+1

위의 R.string에 strings.xml을 붙여 넣을 수 있습니까? (R.string.action_label 등) –

+0

Marcelo, R.string.action_label 사실 int (public static final int action_label = 0x ####) 내 Strings.xml 파일에서 조치. R이 자동으로 생성되고 action_label이 XML로 문자열로 정의 되었기 때문에 R에 어떻게 인식 할 수 있습니까? – user2916836

답변

0

코드에 문제가 없습니다. 여기에 몇 가지 시도이다 (당신은 그냥 다시 컴파일하고 다시 실행해야하는 어쩌면?) :

대신 문자열의 리소스 ID와의 setText를 호출하십시오 (등 즉 R.string.unknown_label) : https://developer.android.com/reference/android/widget/TextView.html#setText%28int%29

당신의 setText를 호출 직전 genreName의 값을 기록하십시오 :

Log.d("MovieGenre", "genreName=" + genreName);

+0

감사합니다 D.Moore. 나는 지금 그 일을 시험 할 수는 없지만이 일들이 어떻게 돌아가는지 알려 줄 것입니다. 다시 한 번 감사드립니다! – user2916836

+0

3 가지 제안을 시도했지만 여전히 String 대신 int로 표시되는 장르가 있습니다. 대신, 내 movieInfo 객체의 장르 사례 상수를 String으로 변경하고이를 int로 호출 한 나머지 코드를 수정했습니다. 다음 switch case 대신에 if-else if 문을 사용했습니다. 그 이유는 단지 7 가지 경우 밖에 없었기 때문입니다. 스위치 케이스 대신 if-else if 문을 사용하는 것이 나쁜 코딩 방법입니까? – user2916836

+0

코딩이 잘못 되었습니까? 어 .. 정말로. 문자 단위가 아닌 바이트 값을 비교하기 때문에 열거 형 (enum)을 사용하는 것이 더 효율적이지만 성능 차이는 그리 크지 않습니다.나는 당신의 문제가 무엇인지에 관해서는 여전히 혼란스럽고, 당신의 코드가 다르기 때문에, 나는 정말로 모른다. 작동한다면 멋지다! 그렇지 않으면 업데이트 된 코드를 게시하면 거기에서 갈 수 있습니다. –

관련 문제