Apenas implementado RecyclerView
no meu código, substituindo ListView
.
Tudo funciona bem. Os dados são exibidos.
Mas as mensagens de erro estão sendo registradas:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
para o seguinte código:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Como você pode ver, anexei um adaptador para RecyclerView
. Então, por que continuo recebendo esse erro?
Li outras perguntas relacionadas ao mesmo problema, mas nenhuma delas ajuda.
android
android-recyclerview
recycler-adapter
Equitharn
fonte
fonte
Respostas:
Você pode ter certeza de que está chamando essas instruções do thread "principal" (por exemplo, dentro do
onCreate()
método). Assim que eu chamo as mesmas instruções de um método "atrasado". No meu caso aResultCallback
, recebo a mesma mensagem.Na minha
Fragment
, chamar o código abaixo de dentro de umResultCallback
método produz a mesma mensagem. Depois de mover o código para oonConnected()
método dentro do meu aplicativo, a mensagem desapareceu ...fonte
Eu estava recebendo as mesmas duas mensagens de erro até corrigir duas coisas no meu código:
(1) Por padrão, quando você implementa métodos,
RecyclerView.Adapter
ele gera:Atualize seu código para que ele diga:
Obviamente, se você tiver zero itens em seus itens, receberá zero itens na tela.
(2) Eu não estava fazendo isso como mostrado na resposta superior: CardView layout_width = "match_parent" não corresponde à largura principal do RecyclerView
(3) EDIT: BÔNUS: Também certifique-se de configurar o
RecyclerView
seguinte:Assim não:
Eu já vi alguns tutoriais usando o último método. Enquanto funciona, acho que gera esse erro também.
fonte
public int getItemCount() { return artists == null ? 0 : artists.size(); }
e o LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
Eu tenho a mesma situação com você, a tela está ok, mas o erro aparece no local. Essa é a minha solução: (1) Inicialize o RecyclerView e o adaptador de ligação ON CREATE ()
(2) chame notifyDataStateChanged quando você obtiver os dados
No código-fonte do recyclerView, há outro encadeamento para verificar o estado dos dados.
No dispatchLayout (), podemos encontrar o erro:
fonte
Eu tenho esse problema, algumas vezes o problema é recycleView colocado no objeto ScrollView
Após verificar a implementação, o motivo parece ser o seguinte. Se o RecyclerView for colocado em um ScrollView, durante a etapa de medição, sua altura não será especificada (porque o ScrollView permite qualquer altura) e, como resultado, será igual à altura mínima (conforme a implementação) que aparentemente é zero.
Você tem algumas opções para corrigir isso:
(Pode ser seguido
android.support.v4.widget.NestedScrollView
também)fonte
1) Crie o ViewHolder que não faz nada :)
2) Crie novamente o RecyclerView que não faz nada :)
3) Agora, quando o seu reciclador real não estiver pronto, use a amostra como abaixo.
Esta não é a melhor solução, mas funciona! Espero que isso seja útil.
fonte
Isso acontece quando você não está configurando o adaptador durante a fase de criação:
Basta mover a configuração do adaptador para onCreate com dados vazios e quando você receber a chamada de dados:
fonte
Verifique se você esqueceu de chamar esse método no seu adaptador
fonte
Certifique-se de definir o gerenciador de layout para o seu RecyclerView:
Em vez de
LinearLayoutManager
, você também pode usar outros gerenciadores de layout.fonte
Eu tive o mesmo erro, eu o corrigi fazendo isso se você estiver esperando por dados como eu usando o retrofit ou algo assim
Colocar antes de Oncreate
Coloque-os no seu Oncreate
Quando você recebe dados
Agora vá na sua classe ArtistArrayAdapter e faça o que ele fará: se sua matriz estiver vazia ou for nula, fará com que GetItemCount retorne 0, caso contrário, tornará o tamanho da matriz de artistas
fonte
Essas linhas devem estar em
OnCreate
:fonte
Isso acontece porque o layout inflado real é diferente daquele que está sendo referido por você ao encontrar o recyclerView. Por padrão, quando você cria o fragmento, o método onCreateView aparece da seguinte maneira:
return inflater.inflate(R.layout.<related layout>,container.false);
Em vez disso, crie a visualização separadamente e use-a para se referir ao recyclerView
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
fonte
Inicialize primeiro o adaptador
Sempre que houver uma alteração no conjunto de dados, chame o método updateComments.
fonte
Para quem usa o
RecyclerView
dentro de um fragmento e o inflaciona de outras visualizações: ao inflar a visualização inteira do fragmento, certifique-se de vincular aRecyclerView
à visualização raiz.Eu estava conectando e fazendo tudo pelo adaptador corretamente, mas nunca fiz a ligação. Esta resposta de @Prateek Agarwal tem tudo para mim, mas aqui está mais elaboração.
Kotlin
Java
fonte
Basta substituir o código acima por este e ele deve funcionar. O que você fez de errado foi chamado setAdapter (adaptador) antes de chamar o gerenciador de layout.
fonte
Este é realmente um erro simples que você está recebendo, não sendo necessário fazer nenhum código. Este erro ocorre devido ao arquivo de layout errado usado pela atividade. Pelo IDE, criei automaticamente um layout v21 de um layout que se tornou um layout padrão da atividade. todos os códigos que fiz no arquivo de layout antigo e o novo estava com apenas alguns códigos xml, o que levou a esse erro.
Solução: Copie todos os códigos do layout antigo e cole no layout v 21
fonte
No meu caso, eu estava configurando o adaptador dentro de
onLocationChanged()
retorno de chamada E depurando no emulador. Como não detectou uma alteração de local, nunca foi acionado. Quando eu os defino manualmente nos controles estendidos do emulador, ele funcionou conforme o esperado.fonte
Eu resolvi esse erro. Você só precisa adicionar o gerenciador de layout e adicionar o adaptador vazio.
Como este código:
fonte
Basta adicionar o seguinte a
RecyclerView
Exemplo:
fonte
Eu tive esse erro e tentei corrigir por um tempo até encontrar a solução.
Criei um método privado buildRecyclerView e o chamei duas vezes, primeiro no onCreateView e depois no meu retorno de chamada (no qual busco dados de uma API). Este é o meu método buildRecyclerView no meu fragmento:
Além disso, tenho que modificar o método get-Item-Count no meu adaptador, porque On on-Create-View a lista é nula e através de um erro. Portanto, meu get-Item-Count é o seguinte:
fonte
Na minha situação, era um componente esquecido que se localiza na classe ViewHolder, mas não estava localizado no arquivo de layout
fonte
I teve o mesmo problema e realizou I foi configuração tanto o LayoutManage r e adaptador depois de recuperar os dados do meu fonte em vez de fixar as duas no onCreate método.
Em seguida, notificou o adaptador sobre alteração de dados
fonte
Esse problema ocorre porque você não está adicionando nenhum
LayoutManager
para o seuRecyclerView
.Outro motivo é porque você está chamando esse código em um NonUIThread. Certifique-se de ligar para esta chamada no UIThread.
A solução é só você tem que adicionar um
LayoutManager
para oRecyclerView
antessetAdapter
no segmento.fonte
Meu problema era que minha visão do reciclador era assim
Quando deveria ter ficado assim
fonte
Na sua
RecyclerView
classe de adaptador, por exemploMyRecyclerViewAdapter
, faça um construtor com os seguintes parâmetros.mData
são os dados que você passará para o adaptador. É opcional se você não tiver dados a serem transmitidos.mInflater
é oLayoutInflater
objeto que você criou e utiliza naOnCreateViewHolder
função do adaptador.Depois disso, conecte o adaptador na MainActivity ou onde quiser no thread principal / UI adequadamente, como
fonte
Resolvido configurando a lista vazia inicializada e o adaptador na parte inferior e chamando notifyDataSetChanged quando os resultados são buscados.
fonte
Perdi 16 minutos da minha vida com esse problema, então vou admitir esse erro incrivelmente embaraçoso que estava cometendo - estou usando o Butterknife e vinculo a visualização no onCreateView neste fragmento.
Demorou muito tempo para descobrir por que eu não tinha um gerenciador de layout - mas, obviamente, as visualizações são injetadas para que não sejam realmente nulas; portanto, o reciclador nunca será nulo.
Se você estiver tendo um problema como esse, rastreie sua visualização e use algo como
uiautomatorviewer
fonte
Não tenho muita resposta, mas também estava com o mesmo problema, mesmo com o código correto. Às vezes, é apenas a mais simples das marcas. Nesse caso, o erro do OP também pode estar ausente
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
no manifesto, que reproduz o mesmo erro.fonte
No meu caso, aconteceu porque eu incorporei um RecyclerView em um LinearLayout.
Anteriormente, eu tinha um arquivo de layout contendo apenas um RecyclerView raiz da seguinte maneira
Eu acredito que o problema está dentro das 3 linhas separadas. De qualquer forma, acho que é um problema simples, vou trabalhar nisso amanhã; pensei que deveria escrever o que encontrei antes de esquecer esta discussão.
fonte
Adicionando mais uma resposta desde que me deparei com este tópico pesquisando o erro no Google. Eu estava tentando inicializar um
PreferenceFragmentCompat
mas eu esqueci de inflar a preferência XML daonCreatePreferences
seguinte maneira:O erro foi um mistério até que percebi que
PreferenceFragmentCompat
devia estar usando umRecyclerView
internamente.fonte
// Isso acontece quando você não está configurando o adaptador durante a fase de criação: ligue notifyDataSetChanged () quando a resposta da API estiver recebendo seu funcionamento
fonte