Хит немного блокпоста и интересно, как его решить, кажется, что курица и яйцо для меня могут сделать со свежей парой глаз.Показать различные viewType в RecyclerView на основе информации в базе данных?
У меня есть база данных с информацией о местах в них. Я хочу показать все места, упорядоченные по расстоянию в моем RecyclerView
.
Я действительно сделал это уже, когда есть только один viewType
. Однако это то, что я не могу понять, я хочу показать другое представление для мест, находящихся на определенном расстоянии от пользователя. Так, например, в пределах 100 метров.
Эта информация находится в моей базе данных, поэтому, когда getItemViewType(int position)
вызывается на setAdapter(), мой CursorLoader
не закончил вынимать всю информацию, поэтому я получаю исключение из нулевого указателя.
На мой вопрос:
Есть ли способ для меня, чтобы ждать, пока мой CursorLoader
закончить затем работать с моим адаптером и не иметь нуль Cursor
? Когда я пытаюсь позвонить .setAdapter()
после завершения загрузки, я получаю следующее в своих журналах: No adapter attached; skipping layout
, потому что RecyclerView
необходимо, чтобы адаптер устанавливался при создании действия.
Мои getItemViewType(position)
в настоящее время выглядит следующим образом:
if (!cursor.isClosed()) {
cursor.moveToPosition(position);
}
if (cursor.getInt(2) <= 100) {
return TYPE_NEARBY;
} else {
return TYPE_NOT_NEARBY;
}
По сути, мне нужно использовать данные в моем CursorLoader
определить viewType
и загрузить другой вид для этой ячейки. С одним ViewType это работает, потому что мне не нужно проверять расстояние, они все одинаковы.
Спасибо за любую помощь, которую вы можете предложить!
'getItemViewType' не следует вызывать, если' getItemCount' возвращает '0', что должно иметь место, если ваш курсор равен NULL. – Blackbelt
Просто запустил его с точками останова, и вы правы. Я получил его работу, обновив идентификаторы на моем onBindViewHolder, когда он вызван. переместите курсор в положение и снова проверьте, чтобы обновить мой зритель. Я думаю, что это потому, что я использую holderId в моем телезрителе, который также должен быть обновлен. –