Intereting Posts

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

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

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

Обновить

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

Solutions Collecting From Web of "Android. Является ли шаблон ViewHolder автоматически реализованным в CursorAdapter?"

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

Я не уверен, что вы ссылаетесь на шаблон ViewHolder . Если вы имеете в виду, что каждый раз, когда класс-хелпер кэшируется, ищет просмотр (и устанавливает его как тег для представления строки), тогда ответ будет отрицательным. Если вы хотите реализовать этот шаблон, вам нужно будет установить держатель (искать представления в представлении строк с findViewById ) в методе newView а затем установить его как тег для представления строки. Затем в методе bindView вы можете вызвать getTag , 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 (например, в адаптерах, не getView Cursor ), то ответ да, метод getView реализует этот шаблон, вам просто нужно реализовать методы newView и bindView и вам гарантировано получить представление, которое Был переработан (если возможно в тот момент).

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

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

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