2013-10-24 1 views
0

Я совершенно новый для разработки android andoveroverflow, поэтому, пожалуйста, пройдите ко мне. ;)Int возвращается, когда String ожидается с помощью TextView

Я создал ViewGroup с несколькими TextViews. Один, в частности, имеет случай переключения, где константы case являются целыми числами, определенными в моем объекте java. Затем я устанавливаю операторы case в то, что, по моему мнению, является значением String. Наконец, я использую метод setText() для установки объекта TextView в эту строку. Проблема, с которой я сталкиваюсь, заключается в том, что то, что на самом деле возвращается в представление, представляет собой целое число, связанное с этим случаем, а не текстовое значение. Это заставляет меня поверить, что то, что я передаю в TextView, является int, но я не вижу, как и где я могу это исправить.

Любая помощь была бы принята с благодарностью.

Код ViewGroup здесь:

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; 
    } 

Случай константы определены в моем Java объект здесь:

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; 

и действие, чтобы установить жанр, когда флажок в основной вид деятельности здесь:

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); 

Порция strings.xml здесь:

<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

Можете ли вы вставить strings.xml для R.string, который вы поставили выше? (R.string.action_label и т. Д.) –

+0

Marcelo, R.string.action_label на самом деле является int (public static final int action_label = 0x ####), но в моем файле Strings.xml у меня есть Действие. Поскольку R автогенерируется и action_label определен в моем xml как String, как мне получить R, чтобы распознать его как таковой? – user2916836

ответ

0

У меня нет проблем с кодом. Вот несколько вещей, чтобы попробовать (может быть, вам просто нужно перекомпилировать и перезапустить его?):

Попробуйте позвонить SetText с идентификатором ресурса вместо строки (т.е. R.string.unknown_label и т.д.): https://developer.android.com/reference/android/widget/TextView.html#setText%28int%29

Попробуйте войти значение genreName прямо перед вызовом SetText:

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

+0

Спасибо D.Moore. Я не могу проверить это сейчас, но вы узнаете, как это получается. Еще раз спасибо! – user2916836

+0

Я пробовал 3 предложения, но все же был жанр, отображаемый как int вместо String. Вместо этого я изменил константы жанрового случая в моем объекте movieInfo на Strings и изменил остальную часть кода, назвав их как int. Тогда вместо случая переключения я использовал if-else if, поскольку у меня было только 7 случаев. Является ли плохой практикой кодирования использовать инструкции if-else if вместо случаев переключения? – user2916836

+0

Плохое кодирование? Эх .. не очень. Это более эффективно с перечислениями, потому что вы сравниваете значения байтов вместо символа по-символу, но в любом случае разница в производительности не будет большой.Я все еще смущен, что касается вашей проблемы, и теперь, когда ваш код отличается, я действительно не знаю. Если он работает, отлично! В противном случае опубликуйте обновленный код, и мы можем перейти оттуда. –

Смежные вопросы