Я хотел бы спросить, почему CursorAdapter
разделяет процесс создания представления и заполняет его данными в newView()
и bindView()
, а BaseAdapter
только делает это с getView()
?Почему CursorAdapter отличается от BaseAdapter?
ответ
От исходного кода 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(), из исходного кода вы можете видеть, что в этом нет необходимости.
Если проверить CurosrAdapter исходный код, который вы можете увидеть, что в getView
методе используются оба newView
и bindView
методы. Метод newView
выполняется только тогда, когда нет представления, поэтому он может сэкономить на создании некоторых объектов. Метод bindView
всегда вызывается, и purpouse должен обновлять данные просмотра.
- 1. Почему {} + [] отличается от {{} + [])?
- 2. Почему стиль отличается от
- 3. Почему == отличается от === здесь?
- 4. Пропустить onClick от CursorAdapter к другому CursorAdapter
- 5. Почему «это» отличается от obj.var
- 6. Почему FrozenList отличается от кортежа?
- 7. Почему UITableView отличается от симулятора?
- 8. Почему HtmlHelper.ViewBag отличается от HtmlHelper.ViewContext.ViewBag
- 9. Почему AsyncLocal отличается от CallContext
- 10. Почему панд == 'отличается от '.EQ()'
- 11. Почему использование ++ отличается от C#?
- 12. Почему GridView нужен BaseAdapter?
- 13. Почему динамическая производительность отличается от этих запросов?
- 14. Почему время процессора отличается от других потоков
- 15. Почему $ (document) .height() отличается от $ (document.body) .height()?
- 16. Почему nl_langinfo (CODESET) отличается от charmap локали?
- 17. Почему .NET Post отличается от CURL? сломана?
- 18. Почему результат разделения отличается от типа литья?
- 19. Почему :: feof() отличается от :: _ eof (:: fileno())?
- 20. Почему Request.ServerVariables ["HTTP_HOST"] отличается от Request.Url.Host?
- 21. Почему макет отличается от раскадровки и симулятора?
- 22. Почему MonthCalendar отличается от стороннего приложения?
- 23. Почему мой выход отличается от другого выхода?
- 24. Почему содержание main.m отличается от других классов?
- 25. Почему WebView отличается от Safari (частный просмотр)?
- 26. JavaScript: Почему предупреждение отличается от поведения?
- 27. Почему CSS по умолчанию отличается от браузера?
- 28. Почему выбор отличается от функции, возвращающей дубликаты?
- 29. Почему .NET System.Version "2.0" отличается от 2.0.0.0?
- 30. Почему поведение BotConnector отличается от эмулятора?
CursorAdapter также закрывает предыдущий использованный курсор (см. Метод changeCursor (Cursor)). Это полезно или ужасно, в зависимости от вашего случая)) – UnknownJoe