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()
метод.