2016-03-28 5 views
9

può voi ragazzi mi può aiutare su questoRecyclerView java.lang.IndexOutOfBoundsException: Rilevata incoerenza. la posizione della voce valida quando riprendere dal frammento aggiunto

qui è il mio codice per aggiungere frammento

mRecyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() { 
     @Override 
     public void onItemClick(View view, int position) { 
      if (!IsScrolling) { 
       Fragment fragment = new ProductInfoFragment(); 
        Bundle bundle = new Bundle(); 
        bundle.putString("prodID", mItems.get(position).getproductID()); 
        bundle.putString("catName", catName); 
        fragment.setArguments(bundle); 
        FragmentManager fragmentManager = getActivity().getFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
             fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
             fragmentTransaction.add(R.id.fragmentContainer, fragment, "ProuctInfoFragment"); 
             fragmentTransaction.addToBackStack(null); 
             fragmentTransaction.commit(); 
             mItems.clear(); 
            } 

           } 

          }) 
        ); 

Ma quando si preme di nuovo dal frammento aggiunto i got questo errore e il mio arresto anomalo dell'app.

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) 

perché sta succedendo? per favore aiuto. Sto usando due frammenti. l'elenco prodotti frammento e dettagli del prodotto frammento

+0

Formattare la tua domanda - inserire 4 posti su ogni linea per farlo apparire come codice – Tim

+3

Perché qualcuno downvote la mia domanda. vita triste .. – Tiseno

+0

Non io, amico mio, stavo solo lavorando sulla coda delle recensioni, che non vota. È buona norma descrivere il problema che vedono quando si scende il voto, mi dispiace di non averlo visto qui. – Tim

risposta

23

stai chiamando mItems.clear(); senza avvisare l'adattatore RecyclerView che qualcosa nei dati era cambiato. dopo ogni modifica ai dati utilizzati dall'adattatore, è necessario chiamare adapter.notifyDataSetChanged();

Vedere this.

+0

omg. perché non l'ho visto ho provato per come un giorno per capire perché. =. = grazie marmor. sei il migliore!! – Tiseno

+2

@Tiseno: dovresti contrassegnare la risposta come corretta, l'ho risolta anche per me, inoltre non dimenticare di votare. – Chepech

+0

Grazie amico, ho perso 3 giorni cercando di sistemarlo ed era proprio di fronte a me. –

3

Prova questo

stavo affrontando lo stesso problema, quando si sta cancellando la vostra lista si sono tenuti a notificare l'adattatore, perché ogni volta che stanno cambiando la lista e l'adattatore è contenente vecchia lista in modo da avere per notificare l'adattatore dopo aver completato la lista prima di aggiungere nuovi elementi in adattatore

  1. rendere istanza di membri dati nell'iniziare fuori sede tua classe

    ArrayList<HashMap<String,String>> yourarraylist =new ArrayList<>(); 
    Youradaptername instance; 
    
  2. dopo aver eliminato l'elenco notificare l'adattatore

    yourarraylist .clear(); 
    instance.notifyDataSetChanged(); 
    
Problemi correlati