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

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

3 ответа

Решение

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

/**
     * @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 работать больше.

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

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

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

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

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

Другие вопросы по тегам