2016-03-28 9 views
9

からの復帰は、あなたたちはここに、このRecyclerView java.lang.IndexOutOfBoundsException:不一致が検出されました。追加フラグメント

で私を助けることができる無効なアイテムの位置は、私のコードは

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(); 
            } 

           } 

          }) 
        ); 

しかし、ときに私は戻って私が得た追加の断片から押しフラグメントを追加することですこのエラーと私のアプリクラッシュ。

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) 

なぜこのようなことが起こりますか?助けてください。私は2つの断片を使っています。商品リストフレグランスと商品詳細フラグメント

+0

あなたの質問をフォーマットしてください - それは、誰かが私の質問をd​​ownvoteなぜコード – Tim

+3

として表示されるように取得するには、各ライン上に4つのスペースを挿入します。悲しい人生.. – Tiseno

+0

私の友人ではない、私はちょうど投票待ちのレビューキューで働いていた。議決権行使の際に表示される問題を説明するのは良い習慣です。申し訳ありませんが、ここで行われていないことをご了承ください。 – Tim

答えて

23

RecyclerViewのアダプターにデータの何かが変更されたことを知らせることなく、mItems.clear();と電話しています。 各アダプタのデータを変更するたびにadapter.notifyDataSetChanged();

thisを参照してください。

+0

mg。なぜ私はそれを見ませんでした。私はいつかのように理由を理解しようとしました。 =。=ありがとう。あなたは最高です!! – Tiseno

+2

@彩乃:答えを正しいものにする必要があります。それも私のために解決しました、また投票を忘れないでください。 – Chepech

+0

ありがとう、私はそれを修正しようと3日失った、それは私の前に正しかった。 –

3

私は同じ問題に直面していたこの

を試してみて、あなたがあなたのリストをクリアしているときに、アダプタに通知する必要がありますので、あなたがリストとアダプタを変更している毎回、古いリストを含むされているので、あなたは、アダプタに通知しなければなりませんアダプタに新しいアイテムを追加する前に、リストをクリアした後

  1. 作るあなたのクラスOOF起動でデータメンバのインスタンス

    ArrayList<HashMap<String,String>> yourarraylist =new ArrayList<>(); 
    Youradaptername instance; 
    
  2. はあなたのリストをクリアした後、アダプタに通知

    yourarraylist .clear(); 
    instance.notifyDataSetChanged(); 
    
関連する問題