4

我想问一下,为什么CursorAdapter将创建视图并用数据填充它的过程拆分成newView()bindView()BaseAdapter只用getView() ?

4

2 回答 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方法中,newViewbindView方法都被使用。方法newView只在没有视图的情况下执行,因此可以省去一些对象的创建。方法bindView总是被调用,它的目的是更新视图数据。

于 2013-09-01T19:14:46.423 回答