我的问题是-CursorAdapter是否在内部重用视图
实现ViewHolder模式,否则它需要按照我们
通常在自定义ArrayAdapter中做什么?
我不太清楚你说的ViewHolder
模式是什么意思.如果您指的是让帮助器类进行缓存,每次查找视图(并将其设置为第View
行的标记),那么答案是否定的.如果您希望实现此模式,则需要在newView
方法中设置持有符(在带有findViewById
的行视图中查找视图),然后将其设置为行视图的标记.然后,在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
和bindView
方法,您就可以保证获得一个被回收的视图(如果当时可能的话).