Я использовал некоторый код из DeskClock и обнаружил, что когда я пытался изменить CursorAdapter, вызывался newView для каждого элемента.(Я действительно хотел добавить разделитель, и кажется, что добавлять разделители по отдельности лучше, чем добавлять их в один listView)
Если у меня есть 3 элемента, я получаю следующее поведение:
newView - called with item: 0
bindView - called with item: 0
bindView - called with item: 1
bindView - called with item: 2
bindView - called with item: 0
newView - called with item: 1
bindView - called with item: 1
newView - called with item: 2
bindView - called with item: 2
newView - called with item: 0
bindView - called with item: 0
bindView - called with item: 1
bindView - called with item: 2
Я бы ожидал, что newView / bindView будет вызываться один раз для каждого элемента курсора.Но, похоже, это не так.Это было для меня проблемой, потому что я хотел выбрать соответствующий вид в зависимости от данных курсора, но поскольку bindView можно было вызывать до того, как newView не работает.
Является ли это каким-то странным поведением переработчика (иликак-то нормально / ожидаемо)?Или что-то не работает с кодом (я удалил все, кроме ListView, и он все еще делает это)?Я не совсем уверен, почему вы пытаетесь связать представления, которые еще не были созданы, и почему newView вызывается по первому элементу дважды.
Спасибо!
Кстати, если кто-топростой способ добавления разделителей в ListViews, которые я хотел бы знать.Я собирался попытаться покопаться в примере контактов, чтобы увидеть, как они это делали, если нет.
Кстати, на случай, если кому-то интересно, MergeAdapter был хорош, чтобы возиться и попробовать (я буду использоватьэто в некоторых других ситуациях).Но я только что написал один адаптер, который обрабатывает несколько представлений.Он вычисляет тип каждого элемента (который является небольшим), сохраняет его на карте, инициализирует его при создании адаптера и обновляет его в notifyDataSetChanged.
Затем вам просто нужно, чтобы getViewTypeCount () возвращал числовозможные взгляды.И getItemViewType возвращает тип из карты (который основан на 0, поэтому 0-getViewTypeCount ()).Если вы можете вычислить свой тип из положения, карта вам не нужна, но сделать это на лету было невозможно, поэтому я просто предварительно / заново вычисляю при необходимости.