Я привык помещать специальный вид в файл макета, как описано в ListActivity
документации, который будет отображаться, когда нет данных . Это представление имеет идентификатор "android:id/empty"
.
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data" />
Интересно, как это можно сделать с новым RecyclerView
?
setEmptyView()
метода противRecyclerView
...setEmptyView()
тоже имел недостаток. При загрузке данных мы не хотели показывать пустое представлениеListView
, но оно появилось. Итак, нам пришлось реализовать некоторую логику. В настоящее время я использую stackoverflow.com/a/48049142/2914140 .Ответы:
На том же макете, где определено
RecyclerView
, добавьтеTextView
:При
onCreate
или соответствующем обратном вызове вы проверяете,RecyclerView
пустой ли набор данных, который передает ваш . Если набор данных пуст,RecyclerView
значит, он тоже пуст. В этом случае сообщение появляется на экране. Если нет, измените его видимость:источник
Для своих проектов я сделал это решение (
RecyclerView
сsetEmptyView
методом):И вы должны использовать его вместо
RecyclerView
класса:и
источник
Вот решение, использующее только пользовательский адаптер с другим типом представления для пустой ситуации.
источник
getItemCount()
должен быть простым, но здесь у нас есть нетривиальноеif
с некоторой скрытой логикой. Эта логика также появляется неловко,getItemViewType
и бог знает, где ещеЯ использую ViewSwitcher
в коде вы будете проверять курсор / набор данных и переключать представления.
Также вы можете установить анимацию, если хотите, с помощью пары строк кода.
источник
Так как ответ Кевина не полный.
Это более правильный ответ, если вы используете
RecyclerAdapter
snotifyItemInserted
иnotifyItemRemoved
для обновления набора данных. Посмотрите версию Kotlin, добавленную другим пользователем ниже.Ява:
Котлин
источник
RVEmptyObserver
Вместо использования пользовательского элемента
RecyclerView
расширениеAdapterDataObserver
представляет собой более простое решение, позволяющее настроить пользовательский параметрView
, отображаемый, когда в списке нет элементов:Пример использования:
Класс:
источник
checkIfEmpty()
вonChanged()
иonItemRangeInserted()
На вашем адаптере
getItemViewType
проверьте, имеет ли адаптер 0 элементов, и верните другой viewType, если это так.Затем
onCreateViewHolder
проверьте, является ли viewType тем, который вы вернули ранее, и создайте другое представление. В этом случае файл макета с этим TextViewРЕДАКТИРОВАТЬ
Если это все еще не работает, то вы можете установить размер представления программно следующим образом:
И тогда, когда вы завышаете ваш вид звонка:
источник
onCreateViewHolder
когда мой набор данныхnull
или пустой , так как я должен вернуться0
вgetItemCount
.android:layout_gravity="center"
иandroid:layout_height="match_parent"
для родительского представления переработчика.android:layout_height="match_parent"
. Хотя ряд не расширяется до высоты экрана.Вот мой класс для показа пустого представления, повторного просмотра (когда загрузка API потерпела неудачу) и загрузки для
RecyclerView
activity_xml
Источник находится здесь https://github.com/PhanVanLinh/AndroidRecyclerViewWithLoadingEmptyAndRetry
источник
Используйте AdapterDataObserver в пользовательском RecyclerView
Котлин:
RecyclerViewEnum.kt
RecyclerViewEmptyLoadingSupport.kt
layout.xml
в деятельности используйте этот способ:
источник
StringDef
илиIntDef
аннотациямиЯ добавил
RecyclerView
и альтернативаImageView
кRelativeLayout
:а затем в
Adapter
:источник
mRecyclerView
внутриAdapter
Еще один способ - использовать,
addOnChildAttachStateChangeListener
который обрабатывает появление / исчезновение дочерних представлений вRecyclerView
.источник
Просто если вы работаете с FirebaseRecyclerAdapter, этот пост работает как очарование https://stackoverflow.com/a/39058636/6507009
источник