GetView Vs. BindView in a custom CursorAdapter?

佐手、 提交于 2019-12-27 16:40:03

问题


So, I'm watching this video http://www.youtube.com/watch?v=N6YdwzAvwOA and Romain Guy is showing how to make more efficient UI adapter code using the getView() method. Does this apply to CursorAdapters as well? I'm currently using bindView() and newView() for my custom cursor adapters. Should I be using getView instead?


回答1:


CursorAdapter has an implementation of getView() that delegates to newView() and bindView(), in such a way as enforces the row recycling pattern. Hence, you do not need to do anything special with a CursorAdapter for row recycling if you are overriding newView() and bindView().




回答2:


/**
     * @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;
    }

This CursorAdapter source code, clearly cursorAdapter work more.




回答3:


The CursorAdapter implementation is different from sub-classing regular adapters like BaseAdapter, you don't need to override getView(), getCount(), getItemId() because that information can be retrieved from the cursor itself.

Given a Cursor, you only need to override two methods to create a CursorAdapter subclass:

bindView() : Given a view, update it to display the data in the provided cursor.

newView() : This gets called to consctruct a new view that goes into the the list.

The CursorAdapter will take care of recycling views (unlike the getView() method on regular Adapter). It doesn't call the newView() each time it needs a new row. If it already has a View(not null), it will directly call the bindView(), this way, the created view is reused. By splitting the creation and population of each view into these two methods, the CursorAdapter achieves view reuse where as, in regular adapters, both these things are done in getView() method.



来源:https://stackoverflow.com/questions/3535074/getview-vs-bindview-in-a-custom-cursoradapter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!