Juste implémenté RecyclerView
dans mon code, en remplacement ListView
.
Tout fonctionne bien. Les données s'affichent.
Mais les messages d'erreur sont enregistrés:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
pour le code suivant:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Comme vous pouvez le voir, j'ai joint un adaptateur pour RecyclerView
. Alors pourquoi est-ce que je continue à recevoir cette erreur?
J'ai lu d'autres questions liées au même problème, mais aucune ne m'aide.
android
android-recyclerview
recycler-adapter
equitharn
la source
la source
Réponses:
Pouvez-vous vous assurer d'appeler ces instructions à partir du thread "principal" (par exemple à l'intérieur de la
onCreate()
méthode). Dès que j'appelle les mêmes déclarations à partir d'une méthode "différée". Dans mon casResultCallback
, j'ai le même message.Dans my
Fragment
, appeler le code ci-dessous depuis l'intérieur d'uneResultCallback
méthode produit le même message. Après avoir déplacé le code vers laonConnected()
méthode de mon application, le message avait disparu ...la source
J'obtenais les mêmes deux messages d'erreur jusqu'à ce que je corrige deux choses dans mon code:
(1) Par défaut, lorsque vous implémentez des méthodes dans le,
RecyclerView.Adapter
il génère:Assurez-vous de mettre à jour votre code pour qu'il indique:
Évidemment, si vous n'avez aucun élément dans vos éléments, vous n'aurez aucun élément affiché à l'écran.
(2) Je ne faisais pas cela comme indiqué dans la réponse du haut: CardView layout_width = "match_parent" ne correspond pas à la largeur de RecyclerView parent
(3) EDIT: BONUS: Assurez-vous également de configurer votre
RecyclerView
comme ceci:Pas comme ça:
J'ai vu quelques tutoriels utilisant cette dernière méthode. Bien que cela fonctionne, je pense que cela génère également cette erreur.
la source
public int getItemCount() { return artists == null ? 0 : artists.size(); }
et le LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
J'ai la même situation avec vous, l'affichage est ok, mais une erreur apparaît dans le locat. C'est ma solution: (1) Initialiser l'adaptateur RecyclerView & bind ON CREATE ()
(2) appelez notifyDataStateChanged lorsque vous obtenez les données
Dans le code source de recyclerView, il existe un autre thread pour vérifier l'état des données.
Dans le dispatchLayout (), nous pouvons trouver qu'il y a l'erreur:
la source
j'ai ce problème, un problème de temps est recycleView mis dans l' objet ScrollView
Après avoir vérifié l'implémentation, la raison semble être la suivante. Si RecyclerView est placé dans un ScrollView, alors pendant l'étape de mesure, sa hauteur n'est pas spécifiée (car ScrollView autorise n'importe quelle hauteur) et, par conséquent, devient égale à la hauteur minimale (selon l'implémentation) qui est apparemment nulle.
Vous avez deux options pour résoudre ce problème:
(Peut également être suivi
android.support.v4.widget.NestedScrollView
)la source
1) Créez un ViewHolder qui ne fait rien :)
2) Créez à nouveau RecyclerView qui ne fait rien :)
3) Maintenant, lorsque votre véritable recycleur n'est pas prêt, utilisez simplement l'échantillon comme ci-dessous.
Ce n'est pas la meilleure solution, mais cela fonctionne! J'espère que cela vous sera utile.
la source
Cela se produit lorsque vous ne définissez pas l'adaptateur pendant la phase de création:
Déplacez simplement la configuration de l'adaptateur dans onCreate avec des données vides et lorsque vous avez l'appel de données:
la source
Vérifiez si vous avez manqué d'appeler cette méthode dans votre adaptateur
la source
Assurez-vous de définir le gestionnaire de disposition pour votre RecyclerView en:
Au lieu de
LinearLayoutManager
, vous pouvez également utiliser d' autres gestionnaires de disposition.la source
J'ai eu la même erreur, je l'ai corrigé en faisant cela si vous attendez des données comme moi en utilisant la modification ou quelque chose comme ça
Mettre avant Oncréer
Mettez-les dans votre Oncreate
Lorsque vous recevez des données mises
Maintenant, allez dans votre classe ArtistArrayAdapter et faites ce que cela fera si votre tableau est vide ou est nul cela fera que GetItemCount retournera 0 sinon il fera la taille du tableau d'artistes
la source
Ces lignes doivent être en
OnCreate
:la source
Cela se produit car la disposition gonflée réelle est différente de celle que vous avez référée lors de la recherche de recyclerView. Par défaut, lorsque vous créez le fragment, la méthode onCreateView apparaît comme suit:
return inflater.inflate(R.layout.<related layout>,container.false);
Au lieu de cela, créez séparément la vue et utilisez-la pour faire référence à recyclerView
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
la source
Initialiser d'abord l'adaptateur
Chaque fois qu'il y a un changement dans l'ensemble de données, il suffit d'appeler la méthode updateComments.
la source
Pour ceux qui utilisent l'
RecyclerView
intérieur d'un fragment et le gonflent à partir d'autres vues: lorsque vous gonflez la vue entière du fragment, assurez-vous de lier leRecyclerView
à sa vue racine.Je me connectais et faisais tout pour l'adaptateur correctement, mais je n'ai jamais fait la liaison. Cette réponse de @Prateek Agarwal a tout pour moi, mais voici plus de détails.
Kotlin
Java
la source
Remplacez simplement le code ci-dessus par ceci et cela devrait fonctionner. Ce que vous avez fait de mal, c'est que vous avez appelé setAdapter (adaptateur) avant d'appeler le gestionnaire de disposition.
la source
C'est vraiment une simple erreur que vous obtenez, il n'est pas nécessaire de faire de codes dans ce domaine. Cette erreur se produit en raison d'un fichier de mise en page incorrect utilisé par l'activité. Par IDE, j'ai automatiquement créé une mise en page v21 d'une mise en page qui est devenue une mise en page par défaut de l'activité. tous les codes que j'ai faits dans l'ancien fichier de mise en page et le nouveau ne contenaient que quelques codes xml, ce qui a conduit à cette erreur.
Lösung: Copiez tous les codes de la vieille disposition et collez dans la disposition v 21
la source
Dans mon cas, je mettais l'adaptateur dans le
onLocationChanged()
rappel ET le débogage dans l'émulateur. Comme il n'a pas détecté de changement d'emplacement, il n'a jamais tiré. Lorsque je les ai définis manuellement dans les contrôles étendus de l'émulateur, cela a fonctionné comme prévu.la source
J'ai résolu cette erreur. Il vous suffit d'ajouter un gestionnaire de disposition et d'ajouter l'adaptateur vide.
Comme ce code:
la source
Ajoutez simplement ce qui suit à
RecyclerView
Exemple:
la source
J'ai eu cette erreur et j'ai essayé de la réparer pendant un certain temps jusqu'à ce que je trouve la solution.
J'ai créé une méthode privée buildRecyclerView, et je l'ai appelée deux fois, d'abord sur onCreateView, puis après mon rappel (dans lequel je récupère des données à partir d'une API). Voici ma méthode buildRecyclerView dans mon fragment:
En outre, je dois modifier la méthode get-Item-Count dans mon adaptateur, car sur On-Create-View la liste est nulle et cela par une erreur. Donc, mon get-Item-Count est le suivant:
la source
Dans ma situation, c'était un composant oublié qui se trouve dans la classe ViewHolder mais il ne se trouvait pas dans le fichier de disposition
la source
J'ai eu le même problème et j'ai réalisé que je définissais à la fois LayoutManage r et l' adaptateur après avoir récupéré les données de ma source au lieu de définir les deux dans la méthode onCreate .
Puis a informé l'adaptateur de la modification des données
la source
Ce problème est dû au fait que vous n'en ajoutez pas
LayoutManager
pour votre compteRecyclerView
.Une autre raison est que vous appelez ce code dans un NonUIThread. Assurez-vous d'appeler cet appel dans l'UIThread.
La solution est seulement que vous devez ajouter un
LayoutManager
pour l'RecyclerView
avantsetAdapter
dans le thread d'interface utilisateur.la source
Mon problème était que ma vue de recycleur ressemblait à ceci
Quand ça aurait dû ressembler à ça
la source
Dans votre
RecyclerView
classe d'adaptateur, par exempleMyRecyclerViewAdapter
, créez un constructeur avec les paramètres suivants.mData
sont les données que vous transmettez à l'adaptateur. Il est facultatif si vous n'avez aucune donnée à transmettre.mInflater
est l'LayoutInflater
objet que vous avez créé et que vous utilisez dans laOnCreateViewHolder
fonction de l'adaptateur.Après cela, vous attachez l'adaptateur dans MainActivity ou où vous le souhaitez sur le thread principal / UI correctement, comme
la source
Résolu en définissant la liste vide initialisée et l'adaptateur en bas et en appelant notifyDataSetChanged lorsque les résultats sont récupérés.
la source
J'ai perdu 16 minutes de ma vie avec ce problème, donc je vais simplement admettre cette erreur incroyablement embarrassante que je faisais - j'utilise Butterknife et je lie la vue dans onCreateView dans ce fragment.
Il a fallu beaucoup de temps pour comprendre pourquoi je n'avais pas de gestionnaire de mise en page - mais de toute évidence, les vues sont injectées afin qu'elles ne soient pas réellement nulles, de sorte que le recycleur ne sera jamais nul .. oups!
Si vous rencontrez un problème comme celui-ci, tracez votre point de vue et utilisez quelque chose comme
uiautomatorviewer
la source
Pas beaucoup de réponse mais j'avais aussi le même problème avec le code correct. Parfois, c'est juste la plus simple des marques. Dans ce cas, l'erreur du PO peut également être manquante
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
dans le manifeste, qui reproduit la même erreur.la source
Dans mon cas, cela s'est produit car j'ai intégré un RecyclerView dans un LinearLayout.
J'avais auparavant un fichier de mise en page contenant uniquement un RecyclerView racine comme suit
Je crois que le problème est dans les 3 lignes séparées. Quoi qu'il en soit, je pense que c'est un problème simple, je ne travaillerai pas dessus demain; pensé que je devrais écrire ce que j'ai trouvé avant d'oublier ce fil.
la source
Ajout d'une autre réponse depuis que je suis tombé sur ce fil googler l'erreur. J'essayais d'initialiser un
PreferenceFragmentCompat
mais j'ai oublié de gonfler la préférence XMLonCreatePreferences
comme ceci:L'erreur était un mystère jusqu'à ce que je réalise que cela
PreferenceFragmentCompat
devait être utilisé enRecyclerView
interne.la source
// Cela se produit lorsque vous ne définissez pas l'adaptateur pendant la phase de création: appelez notifyDataSetChanged () lorsque la réponse api obtient son fonctionnement
la source