0

私はアンドロイド開発とスタックオーバーフローにまったく慣れていないので、気楽にやってください。;)

多数の TextView を持つ ViewGroup を作成しました。特に、ケース定数が私のJavaオブジェクトで定義された整数であるスイッチケースがあります。次に、case ステートメントを String 値であると思われるものに設定します。最後に、setText() メソッドを使用して、TextView オブジェクトをこの String に設定します。私が抱えている問題は、実際にビューに返されるのは、テキスト値ではなく、ケースに関連付けられた整数であることです。これにより、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> 

ご協力いただきありがとうございます!

4

1 に答える 1

0

あなたのコードに問題はありません。試してみるべきことがいくつかあります (おそらく、再コンパイルして再実行するだけでよいでしょうか?):

文字列の代わりにリソース ID (R.string.unknown_label など) を使用して setText を呼び出してみてください: https://developer.android.com/reference/android/widget/TextView.html#setText%28int%29

setText を呼び出す直前に、genreName の値を記録してみてください。

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

于 2013-10-24T17:51:09.240 に答える