为什么CursorAdapter与BaseAdapter不同?

时间:2013-09-01 18:51:28

标签: android baseadapter android-cursoradapter

我想问一下为什么CursorAdapter会分割创建视图并将数据填充到newView()bindView()的过程,而BaseAdapter仅对{getView()执行此操作1}}?

2 个答案:

答案 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模式。

PS:有些开发人员在newView()实现中调用了bindViews()函数,从源代码可以看出没有必要。

答案 1 :(得分:2)

如果您检查了CurosrAdapter源代码,则可以使用getView方法,newViewbindView方法。方法newView仅在没有视图时执行,因此可以省去一些对象的创建。方法bindView总是被调用,它的目的是更新视图数据。