我的问题是 - CursorAdapter 是通过内部实现 ViewHolder 模式来重用视图,还是需要像我们通常在自定义 ArrayAdapter 中那样进行编码?
我不确定你所说的ViewHolder
模式是什么。如果您指的是有一个帮助类来缓存每次查找视图(并将其设置为 row 的标签View
),那么答案是否定的。如果要实现此模式,您需要在方法中设置持有者(使用 查找行视图中的视图findViewById
),newView
然后将其设置为行视图的标记。然后在bindView
您可以调用的方法中getTag
,检索持有者并使用它。一个例子:
// custom CursorAdapter ...
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View rowView = ((LayoutInflater) context
.getSystemService("layout_inflater")).inflate(
R.layout.row_layout, parent, false);
ViewHolder holder = new ViewHolder();
holder.v1 = rowView.findViewById(R.id.v1);
holder.v2 = rowView.findViewById(R.id.v2);
rowView.setTag(holder);
return rowView;
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
ViewHolder holder = (ViewHolder) view.getTag();
// use the holder filled with views
// hlder.v1.setSomething
}
class ViewHolder {
View v1, v2;
}
// ...
如果您指的是convertView
被重用(如在非Cursor
基于适配器中),那么答案是肯定的,该getView
方法实现了这种模式,您只需要实现newView
andbindView
方法,您就可以保证获得一个被回收的视图(如果可能的话在那一刻)。