我想问一下,为什么CursorAdapter
将创建视图并用数据填充它的过程拆分成newView()
,bindView()
而BaseAdapter
只用getView()
?
问问题
1866 次
2 回答
4
来自CursorAdapter.java的源代码,CursorAdapter
扩展BaseAdapter
。
你可以看到getView()
函数实现:
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;
}
它做我们通常做的事情getView()
(如果 convertView 为空,则膨胀视图,否则重用视图),所以它只是为了让开发人员更容易或强制用户使用 ViewHolder 模式。
PS:一些开发人员在 newView() 实现中调用了 bindViews() 函数,从源代码中您可以看到没有必要这样做。
于 2013-09-01T19:05:36.123 回答
2
如果您检查CurosrAdapter源代码,您可以看到,在getView
方法中,newView
和bindView
方法都被使用。方法newView
只在没有视图的情况下执行,因此可以省去一些对象的创建。方法bindView
总是被调用,它的目的是更新视图数据。
于 2013-09-01T19:14:46.423 回答