J'essaie de jouer avec le nouveau RecyclerView et chaque fois que j'essaie de l'exécuter, mon application se bloque immédiatement. Cela me donne NullPointerException pour essayer d'accéder aux méthodes à partir de android.support.v7.widget.RecyclerView
. J'ai regardé d'autres articles et j'ai vu que la plupart des gens ne l'avaient pas fait, compile 'com.android.support:recyclerview-v7:+'
mais j'ai essayé et cela n'a pas du tout aidé. Je ne sais pas vraiment quoi faire à ce stade, toute aide serait appréciée. Voici le journal des erreurs: (je publierais une photo mais je n'ai pas encore 10 rep)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$LayoutManager.onMeasure(android.support.v7.widget.RecyclerView$Recycler, android.support.v7.widget.RecyclerView$State, int, int)' on a null object reference
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:1764)
at android.view.View.measure(View.java:17430)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:727)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:463)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:851)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17430)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5463)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:430)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2560)
at android.view.View.measure(View.java:17430)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2001)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1054)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5786)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
onCreateView
ce que vous supprimez / détruisez / désinscrivez-vousonDestroyView
... Je dois suivre ces cycles de vie!Réponses:
Ce problème se produit généralement lorsque aucun n'a
LayoutManager
été fourni pour leRecyclerView
. Vous pouvez le faire comme ceci:la source
final
, c'est pourquoi je l'ai déclaréefinal
ici.Dans mon cas, il n'était pas lié à «final», mais au problème mentionné dans le commentaire de @ NemanjaKovačević à @aga answer. Je définissais un layoutManager sur le chargement des données et c'était la cause du même crash. Après avoir déplacé la configuration de layoutManager vers onCreateView de mon fragment, le problème a été résolu.
Quelque chose comme ça:
la source
LayoutManager
n'a pas été fourni , c'est tout. Vous pouvez rendre la variable pointant versLayoutManager
final, ou non final - cela ne change rien.Pour moi, j'avais le même problème, le problème était qu'il y avait un RecyclerView inutilisé dans xml avec vue disparue, mais je ne le lie à aucun adaptateur dans Activity, d'où le problème. Il a été résolu dès que j'ai supprimé ces vues de recycleur inutilisées au format XML
c'est-à-dire - j'ai supprimé cette vue car elle n'a pas été appelée dans le code ou un adaptateur a été défini
la source
J'ai vécu ce crash même si j'avais le
RecyclerView.LayoutManager
réglage correctement. J'ai dû déplacer leRecyclerView
code d'initialisation dans leonViewCreated(...)
rappel pour résoudre ce problème.la source
RecyclerView
code d'initialisation dans leonViewCreated(...)
travailVous devez utiliser
setLayoutManager
dans laRecyclerView#onCreate()
méthode. Avant d'ajouterrecyclerView
à une vue, elle doit avoir l'LayoutManager
ensemble.la source
J'ai eu ce problème en raison d'une mauvaise référence d'
RecyclerView
id.à
la source
Vérifiez avec votre identifiant de vue du recycleur, en indiquant la vue réelle du recycleur, a résolu mon problème
la source
Mon problème était dans mon XML lyout J'ai un android: animateLayoutChanges défini sur true et j'ai appelé notifyDataSetChanged () sur l'adaptateur de RecyclerView dans le code Java.
Donc, je viens de supprimer android: animateLayoutChanges de ma mise en page et cela a résolu mon problème.
la source
J'ai eu ce problème lors de l'utilisation de la bibliothèque Butterknife. J'ai eu:
Mais la bonne version est:
la source
Dans Gradle, implémentez cette bibliothèque:
En XML, mentionnez comme ceci:
Dans Fragment, nous utilisons
recyclerView
comme ceci:Dans l' activité, nous utilisons
RecyclerView
comme ceci:si vous avez besoin de l' horizontale,
RecyclerView
procédez comme suit:si vous souhaitez utiliser GridLayoutManager en utilisant une
RecyclerView
utilisation comme celle-ci:la source
J'utilisais une injection de dépendance - ButterKnife et ce problème est survenu parce que je n'avais pas lié la vue.
Donc, dans onCreate (), je viens d'insérer cette ligne:
Ma déclaration RecyclerView avec injection de dépendances:
la source
Pour ceux qui utilisent: implémentation 'androidx.recyclerview: recyclerview: 1.1.0-beta05'
assurez-vous que vous l'utilisez dans votre mise en page xml
J'ai également rencontré un plantage lors de l'exécution de mon application sous l'API 27. Voici un lien vers le message
À l'origine, j'ai créé un style pour changer la taille de la police de ma vue de texte dans la vue de recyclage, c'est pourquoi j'ai créé ce code ci-dessous: (j'aurais pu simplement appeler @dimen lors du changement de la taille de la police en fonction de la taille de l'écran)
À l'intérieur style.xml
et ajouté ceci dans mon thème
themes.xml
Après avoir enquêté, j'ai découvert que c'était celui qui me causait une erreur et après avoir supprimé le style, je ne rencontrais plus de plantage.
J'ai essayé toutes les solutions possibles que j'ai trouvées ici en cas de débordement de pile et j'ai presque abandonné cela, heureusement dans ma curiosité, j'ai pensé pourquoi ne pas supprimer le style peut-être que cela provoque le crash, puis le crash est parti.
la source
Puisque LinearLayoutManager est vertical par défaut, un moyen plus simple de le faire est:
recyclerView.setLayoutManager(new LinearLayoutManager(context));
Si vous souhaitez modifier l'orientation, vous pouvez utiliser ce constructeur:
la source
Je pense que le problème dans votre
Adapter
. Assurez - vous que vous êtes revenuViewHolder
enonCreateViewHolder()
. Comme ci-dessous:la source
Pour moi, le problème était avec mon activity_main.xml (21) dans lequel le recycleView n'avait pas d'identifiant.
activity_main.xml (21)
activity_main.xml
Cela a fonctionné lorsque j'ai ajouté un android: id = "@ + id / transac_recycler_view" à activity_main.xml (21) recycleView
la source
Dans mon cas, j'ai ajouté uniquement la bibliothèque Butterknife et j'ai oublié d'ajouter annotationProcessor. En ajoutant la ligne ci-dessous à build.gradle (module App), j'ai résolu mon problème.
la source
Recyclerview recylerview = findbyid (R.id.recyclerview) Peut-être que vous l'avez manqué
la source
J'ai eu un problème similaire lorsque j'ai testé mon application sur GenyMotion. Après le redémarrage, le problème de l'appareil dans GenyMotion a été résolu
la source
J'ai rencontré le même problème car j'avais le RecyclerView dans une autre mise en page et non sur activity_main.xml.
En cherchant sur certains sites, j'ai obtenu quelque chose et j'ai eu envie de partager ici
Ajouter un identifiant pour inclure la balise dans Activity_main.xml
<include id="includedRecyclerLayout" .... </include>
appelez cette mise en page avant de rechercher la vue par ID dans MainActivity.java
`ConstraintLayout includedLayout = findViewById (R.id.inckudedRecyclerLayout);
RecyclerViewrecyclerview = includedLayout.findViewById (R.id.RECYCLER_VIEW_ID) `;
la source
Si je suis où vous je le ferai. onView (withId (android.R.id.list)). perform (RecyclerViewActions.scrollToPosition (3)); android.R.id.list changez-le en l'identifiant de votre liste et la position sera votre position dans votre tableau.
la source
écriture de code dans onCreateView ()
RecyclerView recyVideo = view.findViewById (R.id.recyVideoFag);
écriture de code dans onCreate () RecyclerView recyVideo = findViewById (R.id.recyVideoFag);
la source