2009-08-26 16 views
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))); 

答えて

3

あなたは例外が何であるかは言いません。私はそれがどちらかを意味し、NullPointerExceptionで推測するつもりです:

  1. あなたがSBooksDbAdapter.KEY_TITLEという名前の結果セット内の列を持っていないandroid:id="@+id/title"、または
  2. であなたの行にウィジェットを持っていない、または
  3. はどういうわけか、あなたは
+0

私のコードは、「ViewHolder」なしでOKのすべてを実行し、そのタグでnoホルダーを持つ行を作成しているが、私が使用した「ViewHolder」に自分のコードを編集するときには、例外をスローします。だから、第一、第二はこの場合ではないかもしれない。そして第三はどうですか?あなたは明確に説明できますか?私は「ホルダーなしで行を作成する」ことについて理解していませんか? – Dennie

+0

もう一度、あなたは例外が何であるかは言わなかったので、推測を続けるように強制しています。 1つは、NullPointerExceptionであると推測されます。 nullになる可能性のあるものの1つは、ホルダーローカル変数です。 getTag()がnullを返す行がある場合はnullになります。その行でsetTag()を呼び出さなかった場合、getTag()はnullを返します。それは私が「所有者のない行を作成する」という意味です。 – CommonsWare

+0

申し訳ありませんが、あなたの推測は正確です。私は私のコードをデバッグするとき "" NullPointerExceptionと言った。上のコードに依存するコードスニペットを表示すると便利です。とにかく、私はそれを確認します、ありがとう! – Dennie