GetView Адаптера Против. Компании bindview в пользовательском CursorAdapter?
Итак, я смотрю это видео http://www.youtube.com/watch?v=N6YdwzAvwOA и Ромен Гай показывает, как сделать более эффективный код адаптера пользовательского интерфейса с помощью getView()
метод. Это относится и к Курсорадаптерам? В настоящее время я использую 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, ясно, что cursorAdapter работает больше.
The
CursorAdapter
реализация отличается от подкласса обычных адаптеров, таких какBaseAdapter
, вам не нужно переопределятьgetView()
,getCount()
,getItemId()
потому что эта информация может быть получена из самого курсора.дали
Cursor
, вам нужно только переопределить два метода для созданияCursorAdapter
подкласс:
bindView()
: учитывая вид, обновите его, чтобы отобразить данные в предоставленном курсоре.
newView()
: это называется сознательно новый вид, который входит в список.The
CursorAdapter
будет заботиться о переработке просмотров (в отличие отgetView()
метод на регулярныеAdapter
). Он не вызываетnewView()
каждый раз, когда он нуждается в новой строке. Если он уже имеетView
(неnull
), он будет напрямую вызыватьbindView()
, таким образом, созданный вид используется повторно. Разделив создание и заполнение каждого представления на эти два метода,CursorAdapter
достигает повторного использования представления, где, как в обычных адаптерах, обе эти вещи сделано вgetView()
метод.