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