2013-09-01 6 views

ответ

4

От исходного кода CursorAdapter.java, CursorAdapter распространяется BaseAdapter.
И вы можете видеть реализацию getView() функции:

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; 
    } 

Его делать то, что мы обычно делаем в getView() (надуть вид, если convertView имеет нулевое значение, в противном случае повторного представления), так что его просто для облегчения для разработчиков ИЛИ заставить пользователя использовать шаблон ViewHolder.

PS: Некоторые разработчики называет функцию bindViews() в реализации newView(), из исходного кода вы можете видеть, что в этом нет необходимости.

+0

CursorAdapter также закрывает предыдущий использованный курсор (см. Метод changeCursor (Cursor)). Это полезно или ужасно, в зависимости от вашего случая)) – UnknownJoe

2

Если проверить CurosrAdapter исходный код, который вы можете увидеть, что в getView методе используются оба newView и bindView методы. Метод newView выполняется только тогда, когда нет представления, поэтому он может сэкономить на создании некоторых объектов. Метод bindView всегда вызывается, и purpouse должен обновлять данные просмотра.

Смежные вопросы