10
votes

RecyclerView java.lang.indexoutofboundSException: incohérence détectée. Position d'élément non valide lors de la reprise du fragment ajouté

Pouvez-vous m'aider à m'aider sur ce

voici mon code pour ajouter du fragment em> strong> p> xxx pré>

mais Lorsque j'appuie sur le fragment ajouté, j'ai reçu cette erreur et mon accident d'application. P>

FATAL EXCEPTION: main Process: com.tiseno.poplook, PID: 2617
 java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 5(offset:5).state:9
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4401)
      at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
      at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
      at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:438)
      at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
      at android.support.v7.widget.LinearLayoutManager.scrollBy(LinearLayoutManager.java:1161)
      at android.support.v7.widget.LinearLayoutManager.scrollVerticallyBy(LinearLayoutManager.java:1018)
      at android.support.v7.widget.RecyclerView$ViewFlinger.run(RecyclerView.java:3807)
      at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
      at android.view.Choreographer.doCallbacks(Choreographer.java:670)
      at android.view.Choreographer.doFrame(Choreographer.java:603)
      at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
      at android.os.Handler.handleCallback(Handler.java:739)
      at android.os.Handler.dispatchMessage(Handler.java:95)
      at android.os.Looper.loop(Looper.java:224)
      at android.app.ActivityThread.main(ActivityThread.java:5514)
      at java.lang.reflect.Method.invoke(Native Method)
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)


4 commentaires

Veuillez formater votre question - Insérez 4 espaces sur chaque ligne pour l'amener à apparaître sous forme de code


Pourquoi quelqu'un descendit ma question. triste vie..


Pas moi mon ami, je travaillais juste sur la file d'attente d'examen, qui ne vote pas. C'est une bonne pratique de décrire la question qu'ils voient lorsque le vote, désolé de ne pas le voir ici.


Suppression de l'espace inutile, de sorte que le code sera correctement indenté et sera utile pour que les autres puissent le traverser et y répondre.


3 Réponses :


34
votes

Vous appelez mitems.clear (); sans notifier l'adaptateur recyclerview que quelque chose dans les données avait changé. Après chaque modification des données utilisées par l'adaptateur, vous devez appeler Adapter.notifyDatastoSetSetSetSetSetSetSetSetSetSetSetchged ();

voir Ce .


5 commentaires

OMG. pourquoi je n'ai pas vu ça. J'ai essayé d'avoir comme un jour pour comprendre pourquoi. =. = merci Marmor. tu es le meilleur!!


@Tiseno: Vous devriez marquer la réponse comme le correct, cela m'a résolu pour moi aussi, n'oubliez pas non plus voter.


Merci à l'homme, j'ai perdu 3 jours d'essayer de le réparer et c'était juste devant moi.


Travaillé pour moi. Merci.


Pour moi, remplacer SupportsPrédictiveItManimations sur FALSE n'a pas résolu l'exception, mais cette solution résolvait-la, merci man.



5
votes

Essayez ceci

​​Je faisais face au même problème, lorsque vous effacez votre liste, vous devez notifier l'adaptateur car chaque fois que vous modifiez la liste et que l'adaptateur contient une liste ancienne, vous devez donc notifier l'adaptateur après avoir effacé. La liste avant d'ajouter de nouveaux éléments dans Adaptateur P>

  1. Faites de l'instance de membres de données dans le démarrage de votre classe p>

     yourarraylist .clear();
     instance.notifyDataSetChanged();
    
  2. Après avoir effacé votre liste en avertit l'adaptateur p>

    ArrayList<HashMap<String,String>> yourarraylist =new ArrayList<>();
    Youradaptername instance;
    


0 commentaires

0
votes

Le problème peut être lié à l'adaptateur. Si vous utilisez SethaSstableIDS (true); dans le constructeur de l'adaptateur, vous devez vous assurer que vous utilisez IDS stable .

Assurez-vous de remplacer correctement getItemid correctement dans l'adaptateur. Il devrait être: xxx

et non : xxx


0 commentaires