Mon RecyclerView
n'appelle pas onCreateViewHolder
, onBindViewHolder
même MenuViewHolder
constructeur, donc rien n'apparaît dans RecyclerView
. J'ai mis des journaux pour le débogage et aucun journal n'est affiché. Quel pourrait être le problème?
Mon adaptateur:
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);
}
}
Ma ligne XML personnalisée:
<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"/>
et mon fragment:
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
la source
la source
Réponses:
Votre
getItemCount
méthodereturns 0
. N'essaye doncRecyclerView
jamais d'instancier une vue. Faites-lui retourner quelque chosegreater than 0
.par exemple
la source
Une autre consiste à vous assurer de définir le gestionnaire de mise en page sur RecyclerView:
la source
j'ai oublié d'ajouter la ligne ci-dessous après l'avoir ajoutée, cela a fonctionné pour moi
la source
Cela ne s'applique pas à votre cas particulier. Mais cela pourrait aider quelqu'un d'autre.
Cette raison pourrait être une utilisation imprudente de la méthode suivante
Si non utilisé avec précaution, cela pourrait provoquer la
onBindView
etonCreateViewHolder
de ne pas être appelé à tout, sans erreur dans les journaux.la source
Veuillez configurer le gestionnaire de mise en page pour qu'il
RecyclerView
aime le code ci-dessous:la source
Pour ce que cela vaut, je l'ai observé lorsque j'ai défini l'adaptateur de vue du recycleur avant que l'adaptateur ne soit réellement initialisé. La solution était de s'assurer que l'
recyclerView.setAdapter(adapter)
appelait avec un adaptateur non nulla source
J'espère vraiment vraiment que cela aidera quelqu'un un jour. Je viens de passer plus d'une heure sur celui-ci à devenir fou!
J'avais ceci:
Quand j'aurais dû avoir ça:
Parce que j'ai bêtement appelé mon adaptateur
adapter
, il était masqué par l'adaptateur de la vue du recycleur dans le bloc Apply! J'ai renommé l'adaptateur en projectAdapter pour le différencier et le problème est résolu!la source
Réglage de la hauteur du
TextView
danscustom.xml
ouRecyclerView
. Si la hauteur estwrap-content
, leRecyclerView
ne sera pas visible.la source
Cela s'est produit lorsque j'étais
RecyclerView
dans unScrollView
et que j'utilisais la bibliothèque de support Android 23.0. Pour corriger, j'ai mis à jour vers la bibliothèque de support Android 23.2:Dans build.gradle:
la source
Ajoutez ceci à votre classe d'adaptateur
la source
Peut-être que cela aide quelqu'un, mais si vous définissez la visibilité de votre RecycleView sur GONE, les méthodes de l'adaptateur ne seront pas du tout appelées ... Il m'a fallu un certain temps pour le comprendre.
la source
J'ai eu le même problème, car j'utilisais
android.support.constraint.ConstraintLayout
en ressource de mise en page. Changer pourFrameLayout
aidé.la source
android.support.constraint.ConstraintLayout
?Une autre option est si vous envoyez cet objet de liste en utilisant get, vérifiez si vous avez une référence correcte, par exemple
la source
J'ai lutté avec ce problème pendant de nombreuses heures. J'utilisais un fragment. Et le problème ne retournait pas le fichier
view
. Voici mon code:la source
Voir ma réponse si vous utilisez la bibliothèque de liaison de données Android - Assurez-vous que vous définissez la mise en page pour recyclerview et que le nombre d'éléments doit être supérieur à 0
Bon codage :-)
la source
Dans mon cas, j'ai défini l'ID de mon RecyclerView sur "recyclerView". Il semble que cet ID ait déjà été défini quelque part, car lorsque je l'ai changé pour un ID différent, les méthodes de l'adaptateur ont été appelées correctement.
la source
Si vous utilisez un adaptateur personnalisé, n'oubliez pas de définir ItemCount sur la taille de votre collection.
la source
Dans mon cas, la taille de ma liste était de 0 et il n'appelait pas la méthode onCreateViewHolder. J'avais besoin d'afficher un message au centre de la liste vide comme espace réservé, alors je l'ai fait comme ça et cela a fonctionné comme un charme. Réponse de @Konstantin Burov aidé.
la source
Mon encouter était la méthode remplacée onBindViewHolder (titulaire, position) du RecyclerView.adaptor qui n'était pas appelée. La méthode onCreateViewHolder a été appelée, getItemCount a été appelé. Si vous lisez les spécifications de l'adaptateur Recyclerview, vous apprendrez que si vous avez remplacé onBindViewHolder (titulaire, position, liste des charges utiles) sera appelé en faveur. Alors soyez prudent.
la source
onBindViewHolder
?Si vous mettez wrap_content comme hauteur de votre liste ainsi que la hauteur de votre liste d'éléments, rien ne s'affichera et aucune de vos fonctions recyclerView ne sera appelée. Fixez la hauteur de l'élément ou mettez match_parent pour la hauteur de la liste. Cela a résolu mon problème.
la source
Mon erreur gonflait la mauvaise vue dans Fragment onCreateView.
la source
allez dans votre xml. Et modifiez votre mise en page pour envelopper le contenu. Le premier élément cache le suivant, donc les méthodes ne fonctionnent pas!
la source
Veuillez faire la chose suivante
la source
Dans mon cas, après avoir changé Activity pour utiliser ViewModel et DataBinding, j'avais oublié de supprimer l'
setContentView
appel deonCreate
méthode de method. En le supprimant, mon problème a été résolu.la source
Pour moi, c'était parce que setHasStableIds (true); méthode a été définie. Supprimez cela et cela fonctionnera
la source
recyclerView.setAdapter (adaptateur); appelée La liste recyclerView est remplie en appelant la méthode.
la source
Assurez-vous que votre code
XML
et votreKoltin/Java
correspondance. Dans mon cas, j'ai eu un problème avec leViewHolder
depuis que j'avais écrit:Mais puisque mon code XML est:
J'ai dû changer la ligne privée en:
De plus, j'ai également dû supprimer:
J'espère que cela pourra vous aider :)
la source
Dans mon cas, je manquais d'appeler
notifyDataSetChanged()
après avoir défini la liste dans l'adaptateur.la source
Dans mon cas, je manque de définir l'orientation dans mon LinearLayout.
Après l'ajout du problème d'orientation résolu.
la source
Mon problème était
layout_height
etlayout_width
du RecyclerView réglé sur0dp
.la source