Estou acostumado a colocar uma exibição especial dentro do arquivo de layout, conforme descrito na ListActivity
documentação, a ser exibida quando não houver dados . Essa visualização tem o ID "android:id/empty"
.
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_data" />
Gostaria de saber como isso pode ser feito com o novo RecyclerView
?
setEmptyView()
método contra umRecyclerView
...setEmptyView()
também teve desvantagem. Ao carregar dados, não queríamos mostrar a exibição vaziaListView
, mas foi o que fizemos. Então, tivemos que implementar alguma lógica. Atualmente, uso stackoverflow.com/a/48049142/2914140 .Respostas:
No mesmo layout em que está definido
RecyclerView
, adicione oTextView
:No
onCreate
retorno de chamada ou apropriado, você verifica se o conjunto de dados que alimenta o seuRecyclerView
está vazio. Se o conjunto de dados estiver vazio,RecyclerView
também estará vazio. Nesse caso, a mensagem aparece na tela. Caso contrário, altere sua visibilidade:fonte
Para meus projetos, fiz esta solução (
RecyclerView
comsetEmptyView
método):E você deve usá-lo em vez da
RecyclerView
classe:e
fonte
Aqui está uma solução usando apenas um adaptador personalizado com um tipo de exibição diferente para a situação vazia.
fonte
getItemCount()
deve ser um oneliner, mas aqui temos um não trivialif
com alguma lógica oculta. Essa lógica também aparece desajeitadamente emgetItemViewType
e deus sabe onde maisEu uso o ViewSwitcher
no código, você verificará o cursor / conjunto de dados e alternará as visualizações.
Além disso, você pode definir animações, se desejar, com algumas linhas de código
fonte
Como a resposta de Kevin não está completa.
Essa é a resposta mais correta se você usar
RecyclerAdapter
'snotifyItemInserted
enotifyItemRemoved
atualizar o conjunto de dados. Veja a versão Kotlin de outro usuário adicionado abaixo.Java:
Kotlin
fonte
RVEmptyObserver
Em vez de usar um personalizado
RecyclerView
, estender umAdapterDataObserver
é uma solução mais simples que permite definir um personalizadoView
que é exibido quando não há itens na lista:Exemplo de uso:
Classe:
fonte
checkIfEmpty()
noonChanged()
eonItemRangeInserted()
No adaptador,
getItemViewType
verifique se o adaptador possui 0 elementos e, se houver, retorne um viewType diferente.Em seguida,
onCreateViewHolder
verifique se o viewType é o que você retornou anteriormente e inflate uma visualização diferente. Nesse caso, um arquivo de layout com esse TextViewEDITAR
Se isso ainda não estiver funcionando, convém definir o tamanho da exibição programaticamente da seguinte maneira:
E então, quando você aumenta sua chamada de visualização:
fonte
onCreateViewHolder
quando o meu conjunto de dados énull
ou esvaziar uma vez eu tenho que voltar0
nogetItemCount
.android:layout_gravity="center"
eandroid:layout_height="match_parent"
para a exibição de reciclador pai.android:layout_height="match_parent"
. Embora a linha não se expanda para a altura da tela.Aqui está minha turma para mostrar a exibição vazia, tentar novamente (quando a API de carregamento falhou) e carregar o progresso de
RecyclerView
activity_xml
A fonte está aqui https://github.com/PhanVanLinh/AndroidRecyclerViewWithLoadingEmptyAndRetry
fonte
Use AdapterDataObserver no RecyclerView personalizado
Kotlin:
RecyclerViewEnum.kt
RecyclerViewEmptyLoadingSupport.kt
layout.xml
em atividade, use desta maneira:
fonte
StringDef
ouIntDef
anotaçõesEu adicionei
RecyclerView
e alternativaImageView
aoRelativeLayout
:e depois em
Adapter
:fonte
mRecyclerView
dentro deAdapter
Mais uma maneira é usar o
addOnChildAttachStateChangeListener
que lida com as exibições filho que aparecem / desaparecem noRecyclerView
.fonte
Apenas se você estiver trabalhando com um FirebaseRecyclerAdapter, este post funciona como um encanto https://stackoverflow.com/a/39058636/6507009
fonte