GetView VS. 绑定在一个自定义的CursorAdapter?
所以,我正在观看这个videohttp://www.youtube.com/watch?v=N6YdwzAvwOA,Romain Guy展示了如何使用getView()
方法制作更高效的UI适配器代码。 这是否也适用于CursorAdapters? 我目前使用bindView()
和newView()
为我的自定义游标适配器。 我应该使用getView吗?
CursorAdapter
有一个getView()
的实现,委托给newView()
和bindView()
,强制行循环模式。 因此,如果您重写newView()
和bindView()
,则不需要为CursorAdapter
进行任何特殊的行循环操作。
/** * @see android.widget.ListAdapter#getView(int, View, ViewGroup) */ public View getView(int position, View convertView, ViewGroup parent) { if (!mDataValid) { throw new IllegalStateException("this should only be called when the cursor is valid"); } if (!mCursor.moveToPosition(position)) { throw new IllegalStateException("couldn't move cursor to position " + position); } View v; if (convertView == null) { v = newView(mContext, mCursor, parent); } else { v = convertView; } bindView(v, mContext, mCursor); return v; }
这个CursorAdapter源代码,显然是cursorAdapter工作的更多。
CursorAdapter
实现与BaseAdapter
类的常规适配器BaseAdapter
,您不需要重写getView()
, getCount()
, getItemId()
因为可以从游标本身检索这些信息。
给定一个Cursor
,你只需要重写两个方法来创build一个CursorAdapter
子类:
bindView()
:给定一个视图,将其更新以显示提供的游标中的数据。
newView()
:这被调用来构造进入列表的新视图。
CursorAdapter
将负责处理回收视图(与常规Adapter
上的getView()
方法不同)。 每次需要新行时,它都不会调用newView()
。 如果它已经有一个View
(不是null
),它将直接调用bindView()
,这样一来,创build的视图就被重用了。 通过将每个视图的创build和填充分割成两个方法, CursorAdapter
实现了视图重用,因为在常规的适配器中,这两件事都是在getView()
方法中完成的。