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

Android. Является ли шаблон ViewHolder автоматически реализован в CursorAdapter?

Я всегда использую шаблон ViewHolder в своих пользовательских классах ArrayAdapter. Однако в CursorAdapter метод getView() не является обязательным для переопределения, но имеет методы bindView и newView.

Мой вопрос: - CursorAdapter повторно использует представления, внутренне реализуя шаблон ViewHolder или он должен быть закодирован, как мы обычно делаем в пользовательском ArrayAdapter? Если это необходимо для кодирования, каков правильный способ сделать это?

Обновление

Я использую android.support.v4.widget.CursorAdapter

4b9b3361

Ответ 1

Мой вопрос в том, что CursorAdapter повторно использует представления изнутри реализация шаблона ViewHolder или его кодирование, поскольку мы обычно выполняются в пользовательском ArrayAdapter?

Я не уверен, что вы ссылаетесь на шаблон ViewHolder. Если вы имеете в виду, что каждый раз, когда класс хэппера кэшируется, просматривая просмотр (и устанавливая его как тег для строки View), тогда ответ будет отрицательным. Если вы хотите реализовать этот шаблон, вам нужно будет установить держатель (посмотрите на представления в представлении строк с помощью findViewById) в методе newView, а затем установите его как тег для представления строки. Затем в методе bindView вы можете вызвать getTag, извлечь держатель и использовать его. Пример:

// custom CursorAdapter ...

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        View rowView = ((LayoutInflater) context
                .getSystemService("layout_inflater")).inflate(
                R.layout.row_layout, parent, false);
        ViewHolder holder = new ViewHolder();
        holder.v1 = rowView.findViewById(R.id.v1);
        holder.v2 = rowView.findViewById(R.id.v2);
        rowView.setTag(holder);
        return rowView;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        ViewHolder holder = (ViewHolder) view.getTag();
        // use the holder filled with views
        // hlder.v1.setSomething
    }

    class ViewHolder {
        View v1, v2;
    }
// ...

Если вы ссылаетесь на повторное использование convertView (например, в адаптерах, отличных от Cursor), тогда ответ "да", метод getView реализует этот шаблон, вам просто нужно реализовать newView и bindView, и вам гарантировано получить представление, которое было переработано (если возможно в этот момент).

Ответ 2

Вы не указали, используете ли вы версию платформы или версию библиотеки поддержки CursorAdapter. В любом случае Android является открытым исходным кодом, поэтому вы можете искать себя!

android.support.v4.widget.CursorAdapter
android.widget.CursorAdapter

Если вы используете Chrome, Android SDK Reference Search является очень полезным!