Meu RecyclerView
não chama onCreateViewHolder
, onBindViewHolder
mesmo MenuViewHolder
construtor, pois nada aparece RecyclerView
. Coloquei logs para depuração e nenhum log é mostrado. Qual pode ser o problema?
Meu adaptador:
public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> {
private LayoutInflater inflater;
List<Menu> data = Collections.emptyList();
public MenuAdapter(Context context, List<Menu> data) {
Log.i("DEBUG", "Constructor");
inflater = LayoutInflater.from(context);
Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString());
this.data = data;
for(Menu menu: this.data){
Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu);
}
}
@Override
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.row_menu, parent, false);
MenuViewHolder holder = new MenuViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
Log.i("DEBUG MENU", "onBindViewHolder");
Menu current = data.get(position);
holder.title.setText(current.menu);
}
@Override
public int getItemCount() {
return 0;
}
class MenuViewHolder extends RecyclerView.ViewHolder {
TextView title;
ImageView icon;
public MenuViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.menuText);
}
}
Meu XML de linha personalizado:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/menuText"
android:text="Dummy Text"
android:layout_gravity="center_vertical"
android:textColor="#222"/>
e meu fragmento:
public NavigationFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false"));
if (savedInstanceState != null) {
mFromSavedInstaceState = true;
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_navigation, container, false);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list);
MenuAdapter adapter = new MenuAdapter(getActivity(), getData());
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setAdapter(adapter);
return view;
}
java
android
android-recyclerview
Malinosqui
fonte
fonte
Respostas:
O seu
getItemCount
métodoreturns 0
. Portanto,RecyclerView
nunca tenta instanciar uma exibição. Faça com que ele retorne alguma coisagreater than 0
.por exemplo
fonte
Outra é certificar-se de definir o gerenciador de layout como RecyclerView:
fonte
esqueci de adicionar a linha abaixo depois de adicioná-lo funcionou para mim
fonte
Isso não se aplica ao seu caso específico. Mas isso pode ajudar outra pessoa.
Esse motivo pode ser o uso descuidado do método a seguir
Se não for usado com cuidado, isso pode causar
onBindView
eonCreateViewHolder
não ser chamado, sem nenhum erro nos logs.fonte
Defina o gerenciador de layout
RecyclerView
como abaixo do código:fonte
Pelo que vale, observei quando defini o adaptador de visualização do reciclador antes que o adaptador fosse realmente inicializado. A solução foi garantir que
recyclerView.setAdapter(adapter)
foi chamado com um adaptador não nulofonte
Eu realmente realmente espero que isso ajude alguém algum dia. Eu passo mais de uma hora nessa louca!
Eu tive isso:
Quando eu deveria ter tido isso:
Como liguei tolamente para meu adaptador
adapter
, ele estava sendo ocultado pelo adaptador da visualização da recicladora no bloco de aplicação! Renomeei o adaptador para projectAdapter para diferenciá-lo e resolver o problema!fonte
Definir a altura do
TextView
nocustom.xml
ouRecyclerView
. Se a altura forwrap-content
, oRecyclerView
não será visível.fonte
Isso aconteceu quando eu
RecyclerView
estava dentro de umScrollView
e eu estava usando a Android Support Library 23.0. Para corrigir, atualizei para a Android Support Library 23.2:No build.gradle:
fonte
Adicione isso à sua classe de adaptador
fonte
Talvez ajude alguém, mas se você definir a visibilidade do RecycleView como GONE, os métodos do adaptador não serão chamados ... Levou algum tempo para descobrir isso.
fonte
Eu tive o mesmo problema, porque estava usando o
android.support.constraint.ConstraintLayout
recurso de layout. Mudando paraFrameLayout
ajudou.fonte
android.support.constraint.ConstraintLayout
?Outra opção é se você enviar esta lista objetc usando get, verifique se você tem a referência correta, por exemplo
fonte
Eu lutei com esse problema por muitas horas. Eu estava usando um fragmento. E o problema não estava retornando o
view
. Abaixo está o meu código:fonte
Veja minha resposta se você estiver usando a biblioteca de ligação de dados do Android - verifique se está configurando o layout para a visualização de reciclagem e a contagem de itens deve ser maior que 0
Happy coding :-)
fonte
No meu caso, defino o ID do meu RecyclerView como "recyclerView". Parece que esse ID já estava definido em algum lugar, porque quando eu mudei para um ID diferente, os métodos do adaptador foram chamados corretamente.
fonte
Se estiver usando um adaptador personalizado, não esqueça de definir o ItemCount para o tamanho da sua coleção.
fonte
No meu caso, o tamanho da minha lista era 0 e não estava chamando o método onCreateViewHolder. Eu precisava exibir uma mensagem no centro para a lista vazia como espaço reservado, então eu fiz assim e funcionou como um encanto. Responder por @Konstantin Burov ajudou.
fonte
Meu contato foi o método substituído onBindViewHolder (suporte, posição) do RecyclerView.adaptor que não está sendo chamado. O método onCreateViewHolder foi chamado, getItemCount foi chamado. Se você ler as especificações do Recyclerview Adapter, aprenderá que, se você substituir o onBindViewHolder (titular, posição, carga útil da lista), será chamado a favor. Então, por favor, tenha cuidado.
fonte
onBindViewHolder
?Se você colocar wrap_content como a altura da sua lista e também a da lista de itens, nada será exibido e nenhuma das funções do recyclerView será chamada. Corrija a altura do item ou coloque match_parent para a altura da lista. Isso resolveu meu problema.
fonte
Meu erro foi inflar a exibição errada no Fragment onCreateView.
fonte
vá para o seu xml. E mude seu layout para agrupar o conteúdo. O elemento one está ocultando o próximo, então os métodos não estão funcionando!
fonte
Por favor, faça o seguinte
fonte
No meu caso, depois de alterar Activity para usar o ViewModel e o DataBinding, esqueci de remover a
setContentView
chamada deonCreate
método do método. Ao removê-lo, meu problema foi resolvido.fonte
Para mim, foi porque o setHasStableIds (true); método foi definido. Remova isso e vai funcionar
fonte
recyclerView.setAdapter (adaptador); chamado A lista recyclerView é preenchida chamando o método
fonte
Verifique se o seu código
XML
eKoltin/Java
coincide. No meu caso, tive um problema com oViewHolder
que escrevi:Mas como meu código XML é:
Eu tive que mudar a linha privada para:
Além disso, eu também tive que remover:
Espero que isso possa ajudá-lo :)
fonte
No meu caso, estava faltando uma chamada
notifyDataSetChanged()
após definir a lista no adaptador.fonte
No meu caso, sinto falta de definir a orientação no meu LinearLayout.
Depois de adicionar o problema de orientação corrigido.
fonte
Meu problema era
layout_height
elayout_width
do RecyclerView definido como0dp
.fonte