我想问一下为什么CursorAdapter
会分割创建视图并将数据填充到newView()
和bindView()
的过程,而BaseAdapter
仅对{getView()
执行此操作1}}?
答案 0 :(得分: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为null则膨胀视图,否则重用视图),因此它只是为了让开发人员更容易或强制用户使用ViewHolder模式。
答案 1 :(得分:2)
如果您检查了CurosrAdapter源代码,则可以使用getView
方法,newView
和bindView
方法。方法newView
仅在没有视图时执行,因此可以省去一些对象的创建。方法bindView
总是被调用,它的目的是更新视图数据。