Estoy acostumbrado a poner una vista especial dentro del archivo de diseño como se describe en la ListActivity
documentación que se mostrará cuando no haya datos . Esta vista tiene la identificación "android:id/empty"
.
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data" />
Me pregunto cómo se puede hacer esto con lo nuevo RecyclerView
.
setEmptyView()
método simple contra unRecyclerView
...setEmptyView()
también tenía desventaja. Al cargar datos, no queríamos mostrar una vista vacíaListView
, pero lo hizo. Entonces, tuvimos que implementar algo de lógica. Actualmente uso stackoverflow.com/a/48049142/2914140 .Respuestas:
En el mismo diseño donde se define
RecyclerView
, agregue elTextView
:En la
onCreate
devolución de llamada o en la adecuada, verifica si el conjunto de datos que lo alimentaRecyclerView
está vacío. Si el conjunto de datos está vacío, tambiénRecyclerView
está vacío. En ese caso, el mensaje aparece en la pantalla. Si no, cambie su visibilidad:fuente
Para mis proyectos hice esta solución (
RecyclerView
consetEmptyView
método):Y deberías usarlo en lugar de
RecyclerView
clase:y
fuente
Aquí hay una solución que usa solo un adaptador personalizado con un tipo de vista diferente para la situación vacía.
fuente
getItemCount()
debería ser una línea, pero aquí tenemos una no trivialif
con alguna lógica oculta. Esta lógica también aparece torpementegetItemViewType
y Dios sabe dónde másYo uso ViewSwitcher
en el código verificará el cursor / conjunto de datos y cambiará de vista.
También puede configurar animaciones si lo desea con un par de líneas de código
fuente
Dado que la respuesta de Kevin no está completa.
Esta es la respuesta más correcta si usa
RecyclerAdapter
'snotifyItemInserted
ynotifyItemRemoved
para actualizar el conjunto de datos. Vea la versión de Kotlin que otro usuario agregó a continuación.Java:
Kotlin
fuente
RVEmptyObserver
En lugar de utilizar una personalizada
RecyclerView
, extender unaAdapterDataObserver
es una solución más simple que permite configurar una personalizadaView
que se muestra cuando no hay elementos en la lista:Ejemplo de uso:
Clase:
fuente
checkIfEmpty()
enonChanged()
eonItemRangeInserted()
En el adaptador,
getItemViewType
verifique si el adaptador tiene 0 elementos y devuelve un viewType diferente si es así.Luego, en su
onCreateViewHolder
comprobación, si viewType es el que devolvió anteriormente e infla una vista diferente. En este caso, un archivo de diseño con ese TextViewEDITAR
Si esto todavía no funciona, es posible que desee establecer el tamaño de la vista mediante programación de esta manera:
Y luego, cuando infla su llamada de vista:
fuente
onCreateViewHolder
cuando mi conjunto de datos esnull
o vaciar ya que tengo que volver0
engetItemCount
.android:layout_gravity="center"
yandroid:layout_height="match_parent"
para la vista del reciclador principal.android:layout_height="match_parent"
. Aunque la fila no se expande a la altura de la pantalla.Aquí está mi clase para mostrar vista vacía, reintentar vista (cuando falla la API de carga) y cargar el progreso para
RecyclerView
actividad_xml
La fuente está aquí https://github.com/PhanVanLinh/AndroidRecyclerViewWithLoadingEmptyAndRetry
fuente
Utilice AdapterDataObserver en RecyclerView personalizado
Kotlin:
RecyclerViewEnum.kt
RecyclerViewEmptyLoadingSupport.kt
layout.xml
en actividad use de esta manera:
fuente
StringDef
oIntDef
Agregué una
RecyclerView
alternativaImageView
aRelativeLayout
:y luego en
Adapter
:fuente
mRecyclerView
dentro delAdapter
Una forma más es usar
addOnChildAttachStateChangeListener
qué maneja las vistas secundarias que aparecen / desaparecenRecyclerView
.fuente
Solo en caso de que esté trabajando con un FirebaseRecyclerAdapter, esta publicación funciona como un encanto https://stackoverflow.com/a/39058636/6507009
fuente