2009-08-26 87 views
1

使用「ViewHolder」類時出現問題。我使用「ViewHolder」來改善我的列表顯示語音。我認爲代碼沒問題,但是爲什麼當「setText」與來自「Cursor」的數據拋出異常時。我的代碼在這裏: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. 你沒有你的行中的小部件android:id="@+id/title",或
  2. 您不必命名SBooksDbAdapter.KEY_TITLE在結果集中的一列,或
  3. 不知怎的,你在它的標籤創建一個沒有持有人行
+0

我的代碼運行一切正常無「ViewHolder」,但是當我編輯的代碼,以用於「ViewHolder」它拋出異常。所以,第一,秒可能不是這種情況。那麼第三呢?你能解釋清楚嗎?我不明白「創建沒有持有者的行」? – Dennie 2009-08-26 05:31:05

+0

再一次,你沒有說過什麼是例外,所以你迫使我繼續猜測。一個猜測是它是一個NullPointerException。有一件事可能是空的是你的持有者局部變量。如果你有一些getTag()返回null的行,它將爲null。如果您從未在該行上調用setTag(),getTag()將返回null。這就是我所說的「創建沒有持有者的行」。 – CommonsWare 2009-08-26 15:20:43

+0

對不起,你的猜測正是如此。當我調試我的代碼它「說」NullPointerException。如果你向我展示一些取決於我上面的代碼的代碼片段,這很有幫助。無論如何,我會檢查它,謝謝! – Dennie 2009-08-27 07:23:35

相關問題