一次又一次地调用CursorAdapter中的newView()

时间:2013-11-01 04:38:17

标签: android android-cursoradapter

我的代码就像下面的例子。 它应该只调用一次newView(),但我不知道为什么一次又一次地调用它?

 public class TimeListAdapter extends CursorAdapter {
     private    static  class   ViewHolder  {
         int    nameIndex;
         int    timeIndex;
         TextView   name;
         TextView   time;
    }
  public TimeListAdapter(Context context, Cursor c, int flags) {
    super(context, c, flags);
  }
  @Override
  public void bindView(View view, Context context, Cursor cursor) {
         ViewHolder holder  =   (ViewHolder)    view.getTag();
         holder.name.setText(cursor.getString(holder.nameIndex));
         holder.time.setText(cursor.getString(holder.timeIndex));
  }
  @Override
  public View newView(Context context, Cursor cursor, ViewGroup  
  p parent) {
         View   view    =   LayoutInflater.from(context).inflate    
         p (R.layout.time_row,  null);
         ViewHolder holder  =   new ViewHolder();
         holder.name    =   (TextView)  view.findViewById(R.id.task_name);
         holder.time    =   (TextView)  view.findViewById(R.id.task_time);
     holder.nameIndex   =   cursor.getColumnIndexOrThrow    
         p (TaskProvider.Task.NAME);
         holder.timeIndex   =   cursor.getColumnIndexOrThrow    
         p (TaskProvider.Task.DATE);
         view.setTag(holder);
    return view;
  }
}

例如,我要显示 12 项目,newView()方法应该只调用一次以重复使用视图。(如果我错了请纠正我。)

但在这里至少被召唤7次。我做错了吗?使用CursorAdapter重用ListView有什么根本错误吗?

1 个答案:

答案 0 :(得分:1)

错误! newView方法根据需要多次调用以扩展屏幕上当前可见的视图,然后使用bindView将所需数据实际设置为新增加的视图。然后,当视图离开屏幕并且滚动时出现新视图时,仅调用bindView。那是回收过程。

我想你在屏幕上同时显示了7个项目,这就是为什么newView方法被调用7次的原因。