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()方法中完成的。