Em RecyclerView
, desejo definir uma visualização vazia a ser mostrada quando o adaptador estiver vazio. Existe um equivalente de ListView.setEmptyView()
?
android
android-recyclerview
recycler-adapter
Manish Mulimani
fonte
fonte
Respostas:
Com o novo recurso de vinculação de dados, você também pode conseguir isso diretamente em seu layout:
Nesse caso, você só precisa adicionar uma variável e uma importação à seção de dados do seu XML:
fonte
Adapter
vez do conjunto de dados e usá-logetItemCount()
ou agrupar tudo dentro deViewModel
e definirandroid:visibility
comoviewModel.getEmptyViewVisibility()
.Aqui está uma classe semelhante a @dragon born, mas mais completa. Com base nesta essência .
fonte
setEmptyView
método, que você pode chamar sempre que quiser definir a visualização vazia. Veja aListView.setEmptyView
documentação se não estiver claro, é a mesma ideia.A solução fornecida neste link parece perfeita. Ele usa viewType para identificar quando mostrar emptyView. Não há necessidade de criar RecyclerView personalizado
Adicionando código do link acima:
fonte
Eu simplesmente preferiria uma solução simples como,
tenha seu RecyclerView dentro de um FrameLayout ou RelativeLayout com um TextView ou outra visualização mostrando mensagem de dados vazios com visibilidade DEVIDO por padrão e então na classe do adaptador, aplique a lógica
Aqui, eu tenho um TextView com mensagem sem dados
fonte
Experimente
RVEmptyObserver
:É uma implementação de um
AdapterDataObserver
que permite que você simplesmente defina umView
como o layout vazio padrão para o seuRecylerView
. Dessa forma, em vez de usar um personalizadoRecyclerView
e tornar sua vida mais difícil, você pode usá-lo facilmente com seu código existente:Exemplo de uso:
Você pode ver o código e o uso de exemplo em um aplicativo real aqui.
Classe:
fonte
Minha versão, com base em https://gist.github.com/adelnizamutdinov/31c8f054d1af4588dc5c
fonte
setVisibility
também.Eu preferiria implementar essa funcionalidade no Recycler.Adapter
Em seu método getItemCount substituído, injete códigos de verificação vazios lá:
fonte
setVisibility()
é chamado. Claro que você pode adicionar alguns sinalizadores para compensar, mas é aí que fica mais complexo.Se você deseja oferecer suporte a mais estados, como estado de carregamento, estado de erro, você pode verificar https://github.com/rockerhieu/rv-adapter-states . Caso contrário, o suporte para visualização vazia pode ser implementado facilmente
RecyclerViewAdapterWrapper
em ( https://github.com/rockerhieu/rv-adapter ). A principal vantagem dessa abordagem é que você pode facilmente suportar a visualização vazia sem alterar a lógica do adaptador existente:Uso:
fonte
Eu
consertei isso: Criado o arquivo layout_recyclerview_with_emptytext.xml.
EmptyViewRecyclerView.java criado
---------
EmptyViewRecyclerView emptyRecyclerView = (EmptyViewRecyclerView) findViewById (R.id.emptyRecyclerViewLayout);
emptyRecyclerView.addAdapter (mPrayerCollectionRecyclerViewAdapter, "Não há oração para a categoria selecionada.");
arquivo layout_recyclerview_with_emptytext.xml
EmptyViewRecyclerView.java
fonte
algo assim pode ajudar
fonte
RecyclerView
quando oemptyView
estiver visível (e o oposto). Você também precisará ligarcheckIfEmpty()
paraonItemRangeInserted()
eonItemRangeRemoved()
. Ah, e você poderia ter citado sua fonte: gist.github.com/adelnizamutdinov/31c8f054d1af4588dc5cAcho que isso é mais completo com ErrorView e EmptyView https://gist.github.com/henrytao-me/2f7f113fb5f2a59987e7
fonte
Você pode simplesmente pintar o texto
RecyclerView
quando estiver vazio. A seguir personalizados subclasse suportesempty
,failed
,loading
, eoffline
modos. Para uma compilação bem-sucedida, adicionerecyclerView_stateText
cor aos seus recursos.fonte
Do meu ponto de vista, a maneira mais fácil de fazer uma View vazia é criar uma nova RecyclerView vazia com o layout que você deseja aumentar como plano de fundo. E este adaptador vazio é definido quando você verifica o tamanho do conjunto de dados.
fonte