Question

My Code is just like the below example. It is supposed to call newView() only once, But I don't know why the heck it is being called again and again?

 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;
  }
}

For instance, I have 12 items to be displayed, newView() method is supposed to be called only once to reuse the view.(Please correct me if I am wrong).

But here it is called for at least 7 times. Am I doing anything wrong? else Something fundamentally wrong with reusing ListView using CursorAdapter?

Was it helpful?

Solution

Wrong! newView method is called as many time as needed to inflate the currently visible views on screen, followed by a bindView to actually set the wanted data to those newly inflated views. Then only bindView is called when a view go offscreen and a new one is appearing on scroll. That's the recycling process.

I suppose you have 7 items displayed on screen at the same time, that's the reason why the newView method is called 7 times.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top