2016-03-28 11 views
9
से फिर से शुरू

तुम लोगों ने मुझे इसपुनर्चक्रण देखें 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) 

ऐसा क्यों हो रहा है? कृपया मदद करे। मैं दो खंड का उपयोग कर रहा हूँ। उत्पाद सूची सुगंधित और उत्पाद विवरण खंड

+0

अपने प्रश्न को फ़ॉर्मेट करें - यह कोड – Tim

+3

क्यों किसी ने मेरे सवाल downvote के रूप में प्रकट करने के लिए प्राप्त करने के लिए प्रत्येक पंक्ति पर 4 अंतराल डाल। उदास जीवन .. – Tiseno

+0

मुझे मेरा दोस्त नहीं, मैं सिर्फ समीक्षा कतार पर काम कर रहा था, जो वोट नहीं देता है। इस मुद्दे का वर्णन करना अच्छा अभ्यास है कि वे मतदान करते समय देखते हैं, यह देखने के लिए खेद है कि यह यहां नहीं किया गया है। – Tim

उत्तर

23

आप mItems.clear(); पर कॉल कर रहे हैं RecyclerView के एडाप्टर को सूचित किए बिना डेटा में कुछ बदल गया है। एडाप्टर द्वारा उपयोग किए गए डेटा में प्रत्येक बदलाव के बाद आपको adapter.notifyDataSetChanged();

this पर कॉल करने की आवश्यकता है।

+0

ओएमजी। मैंने उसे क्यों नहीं देखा। मैंने एक दिन की तरह कोशिश करने की कोशिश की है क्यों। =। = धन्यवाद मार्मर। आप सर्वश्रेष्ठ हैं!! – Tiseno

+2

@Tiseno: आपको जवाब को सही के रूप में चिह्नित करना चाहिए, यह मेरे लिए भी हल हो गया है, वोटिंग को भी मत भूलना। – Chepech

+0

धन्यवाद आदमी, मैंने इसे ठीक करने की कोशिश में 3 दिन खो दिए और यह मेरे सामने सही था। –

3

ताकि आप एडाप्टर सूचित करने के लिए है इस

मैं एक ही मुद्दे का सामना करना पड़ रहा था, जब आप अपनी सूची में समाशोधन रहे हैं आप एडाप्टर सूचित करने के लिए है की कोशिश करो, क्योंकि हर आप सूची को बदल रहे हैं और एडाप्टर वर्ष सूची से युक्त है अनुकूलक में नए आइटम जोड़ने से पहले सूची साफ करने के बाद

  1. बनाने के अपने वर्ग दौलत शुरू करने में डेटा सदस्यों के कहने

    ArrayList<HashMap<String,String>> yourarraylist =new ArrayList<>(); 
    Youradaptername instance; 
    
  2. अपनी सूची साफ करने के बाद एडाप्टर सूचित

    yourarraylist .clear(); 
    instance.notifyDataSetChanged(); 
    
संबंधित मुद्दे