GetView Адаптера Против. Компании bindview в пользовательском CursorAdapter?


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

3 53

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, ясно, что cursorAdapter работает больше.

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

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

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

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

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