2013-11-01 52 views
0

我的代碼就像下面的例子。 它應該只調用一次newView(),但我不知道爲什麼它被一次又一次地調用?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; 
    } 
} 

舉例來說,我必須要顯示項目,NewView的()方法應該被調用一次就可以重用視圖(請糾正我,如果我錯了)。

但是這裏至少需要7次。我做錯了什麼?其他東西根本上錯誤重新使用CursorAdapter的ListView?

回答

1

錯! newView方法會根據需要調用多次,以便在屏幕上膨脹當前可見的視圖,然後使用bindView將所需數據實際設置爲新充滿膨脹的視圖。然後,只有當視圖離屏並且在滾動中出現新視圖時,纔會調用bindView。這是回收過程。

我想你有7個項目同時在屏幕上顯示,這就是newView方法被調用7次的原因。

相關問題