我的問題是 - 做的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
方法並保證您可以獲得回收的視圖(如果可能的話)。
'ViewHolder'我的意思是'Holder'模式... –
@Mahendra所以這是第一個案例。不,持有者模式不在'CursorAdapter'中實現(來自SDK或兼容性包)。 – Luksprog
我的查詢是關於'在自定義適配器中編寫'Holder'還是不需要'?我看到'CursorAdapter'類也有'getView'方法.. –