Подтвердить что ты не робот

GetView Vs. BindView в пользовательском CursorAdapter?

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

4b9b3361

Ответ 1

CursorAdapter имеет реализацию getView(), которая делегирует newView() и bindView(), таким образом, чтобы принудительно применял шаблон повторного использования строк. Следовательно, вам не нужно делать что-либо особенное с CursorAdapter для рециркуляции строк, если вы переопределяете newView() и 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;
    }

Этот исходный код CursorAdapter, очевидно, cursorAdapter работает больше.

Ответ 3

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

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

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

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

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