GetView Vs.BindView в пользовательском CursorAdapter? - PullRequest
53 голосов
/ 21 августа 2010

Итак, я смотрю это видео http://www.youtube.com/watch?v=N6YdwzAvwOA, и Ромэн Гай показывает, как сделать более эффективный код адаптера пользовательского интерфейса с помощью метода getView(). Это относится и к CursorAdapters? В настоящее время я использую bindView() и newView() для своих пользовательских адаптеров курсора. Должен ли я использовать getView вместо этого?

Ответы [ 3 ]

73 голосов
/ 21 августа 2010

CursorAdapter имеет реализацию getView(), которая делегирует newView() и bindView() таким образом, чтобы обеспечить использование шаблона перезаписи строк. Следовательно, вам не нужно делать ничего особенного с CursorAdapter для переработки строк, если вы переопределяете newView() и bindView().

19 голосов
/ 16 июля 2012
/**
     * @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;
    }

Этот исходный код CursorAdapter, ясно, курсор Adapter работать больше.

2 голосов
/ 30 апреля 2016

Реализация CursorAdapter отличается от подклассов обычных адаптеров, таких как BaseAdapter, вам не нужно переопределять getView(), getCount(), getItemId(), потому что эту информацию можно получить из самого курсора.

Учитывая Cursor, вам нужно переопределить только два метода для создания CursorAdapter подкласса:

bindView(): для данного представления обновите его, чтобы отобразить данные в указанном курсоре.

newView(): Это вызывается для создания нового представления, которое входит в список.

CursorAdapter позаботится о повторном использовании (в отличие от getView() обычного Adapter). Он не вызывает newView() каждый раз, когда ему нужен новый ряд. Если у него уже есть View (не null), он будет напрямую вызывать bindView(), таким образом, созданный вид используется повторно. Разделив создание и заполнение каждого представления на эти два метода, CursorAdapter достигает повторного использования представления, так как в обычных адаптерах обе эти вещи выполняются в методе getView().

...