2009-08-26 55 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