1
"ViewHolder"クラスを使用するときに問題があります。私はリスト表示のスピーチを改善するために "ViewHolder"を使用します。私はコードが大丈夫だと思うが、なぜ "Cursor"からのデータで "setText"が例外をスローします。私のコードはここにあります:androidの "ViewHolder"クラスの問題
if(row==null){
LayoutInflater inflater = LayoutInflater.from(context);
row = inflater.inflate(R.layout.sbooks_row, null);
holder = new ViewHolder();
holder.id = (TextView)row.findViewById(R.id.id);
holder.title = (TextView)row.findViewById(R.id.title);
holder.icon = (ImageView)row.findViewById(R.id.icon);
row.setTag(holder);
}
else
{
holder = (ViewHolder)row.getTag();
}
holder.title.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_TITLE)));
holder.id.setText(cursor.getString(cursor.getColumnIndex(SBooksDbAdapter.KEY_ROWID)));
私のコードは、「ViewHolder」なしでOKのすべてを実行し、そのタグでnoホルダーを持つ行を作成しているが、私が使用した「ViewHolder」に自分のコードを編集するときには、例外をスローします。だから、第一、第二はこの場合ではないかもしれない。そして第三はどうですか?あなたは明確に説明できますか?私は「ホルダーなしで行を作成する」ことについて理解していませんか? – Dennie
もう一度、あなたは例外が何であるかは言わなかったので、推測を続けるように強制しています。 1つは、NullPointerExceptionであると推測されます。 nullになる可能性のあるものの1つは、ホルダーローカル変数です。 getTag()がnullを返す行がある場合はnullになります。その行でsetTag()を呼び出さなかった場合、getTag()はnullを返します。それは私が「所有者のない行を作成する」という意味です。 – CommonsWare
申し訳ありませんが、あなたの推測は正確です。私は私のコードをデバッグするとき "" NullPointerExceptionと言った。上のコードに依存するコードスニペットを表示すると便利です。とにかく、私はそれを確認します、ありがとう! – Dennie