6


नए पुनर्चक्रण दृश्य में हम wrap_content ऊंचाई (या चौड़ाई के लिए) का उपयोग कर सकते हैं। तो Google निश्चित बग - https://code.google.com/p/android/issues/detail?id=74772
लेकिन अंत में सभी ठीक नहीं हैं।
पुनर्चक्रण दृश्य से आइटम को हटाते समय मैं असंतोष की एनीमेशन का उपयोग करने का प्रयास करता हूं। तो मैं एडाप्टर की विधि का उपयोग करता हूं - किसी भी तर्क और RecyclerView कारण NullPointerException के साथ NotifyItemRemoved (int)।

Xml कोड:समर्थन से पुनर्विक्रेता दृश्य के असंतुलन एनीमेशन में NullPointerException v.23.2.0

... 
    <RecyclerView 
     android:id="@+id/RecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:scrollbars="vertical" 
     android:overScrollMode="always"/> 
    ... 



लॉग्स:

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.NullPointerException 
    at android.support.v7.widget.SimpleItemAnimator.animateDisappearance(SimpleItemAnimator.java:78) 
    at android.support.v7.widget.RecyclerView.animateDisappearance(RecyclerView.java:3246) 
    at android.support.v7.widget.RecyclerView.access$700(RecyclerView.java:147) 
    at android.support.v7.widget.RecyclerView$4.processDisappeared(RecyclerView.java:422) 
    at android.support.v7.widget.ViewInfoStore.process(ViewInfoStore.java:231) 
    at android.support.v7.widget.RecyclerView.dispatchLayoutStep3(RecyclerView.java:3086) 
    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2914) 
    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3277) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663) 
    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521) 
    at android.widget.LinearLayout.onLayout(LinearLayout.java:1434) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.widget.FrameLayout.onLayout(FrameLayout.java:448) 
    at android.view.View.layout(View.java:14015) 
    at android.view.ViewGroup.layout(ViewGroup.java:4373) 
    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1892) 
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1711) 
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
    at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
    at android.view.Choreographer.doFrame(Choreographer.java:532) 
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
    at android.os.Handler.handleCallback(Handler.java:725) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5227) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
    at dalvik.system.NativeStart.main(Native Method) 



इन समस्या का अस्थायी समाधान हो सकता है कि देखते हैं?

संपादित
मैं नई परियोजना में पुन: पेश करने की कोशिश की। तो कोई अपवाद नहीं फेंक दिया गया था। शायद मेरी परियोजना में अन्य निर्भरताएं हैं जो इस समस्या को बुलाती हैं।

+0

क्या आप कोड साझा कर सकते हैं! – Ajinkya

+0

मुझे एक ही समस्या मिल गई है। मुझे लगता है कि यह समर्थन पुस्तकालय में एक बग है। मैं अधिसूचनाओं के भीतर डिफ़ॉल्ट एनीमेशन की तुलना में किसी भी अन्य तरीके से अपनी प्रविष्टियों को एनिमेट नहीं करता ... विधियां – mhenryk

+0

क्या आप एक नमूना ऐप के साथ एक बग रिपोर्ट बना सकते हैं जो आपकी समस्या को पुन: उत्पन्न करता है? – yigit

उत्तर

5

Google ने समर्थन लाइब्रेरी के संस्करण 23.2 के साथ RecyclerView के उपयोग के बारे में कुछ बयान दिया है।

ब्लॉग पोस्ट के लिए लिंक (RecyclerView अनुभाग की जांच): (जैसे में MATCH_PARENT के रूप में पहले से नजरअंदाज कर दिया लेआउट पैरामीटर: http://android-developers.blogspot.com.br/2016/02/android-support-library-232.html कारण इस परिवर्तन के

, दोगुना अपने मद विचारों के लेआउट मापदंडों जांच करना न भूलें स्क्रॉल दिशा) अब पूरी तरह से सम्मानित किया जाएगा।

मैं match_parent करने के लिए अपने RecyclerView के layout_height परम बदलने की कोशिश करने के लिए आप सुझाव है। अगर यह काम करता है, तो हमें बताएं।

+0

हाँ, match_parent RecyclerView के साथ अपवाद का कारण नहीं है। लेकिन मुझे wrap_content में चाहिए। –

+0

हाँ, मैंने इसके बारे में कुछ चर्चाएं पढ़ी हैं, मुझे लगता है कि आपको http://b.android.com पर एक बग भरना चाहिए, जैसा कि यज्ञ ने सुझाव दिया था। –

0

मेरे पास बिल्कुल वही अपवाद है। ऐसा तब होता है जब मैं RecyclerView पर एक दृश्य जोड़ता हूं और यह दृश्य RecyclerView की सीमाओं से परे है (उपयोगकर्ता को उस नए जोड़े गए दृश्य को देखने के लिए स्क्रॉल करना होगा)।

हालांकि, मैंने देखा है कि यह अपवाद केवल तब होता है जब चौड़ाई या RecyclerView की ऊंचाई wrap_content या 0dp एक LinearLayout अंदर 1 पर सेट वजन के साथ है ... अगर मैं उन्हें छोड़कर चौड़ाई और किसी भी अन्य मूल्य के लिए ऊंचाई सेट दो, यानी 140dp, match_parent, तो सब कुछ ठीक काम करता है। 0dp, वजन:

तो, मैं गाड़ी ढांचे चाल और वहाँ के रूप में अंतरिक्ष मेरी LinearLayout के अंदर छोड़ दिया है कि RecyclerView (चौड़ाई शामिल हैं के रूप में बड़ा होने के लिए मेरी RecyclerView की चौड़ाई निर्धारित करने के लिए एक समाधान खोजने के लिए कोशिश की है 1 संयोजन), तो मैं RecyclerView 1 पर सेट वजन के साथ एक और LinearLayout अंदर लिपटे, और मेरे RecyclerView के match_parent लिए चौड़ाई सेट, तो यह माता पिता LinearLayout प्राप्त कर सकते हैं के रूप में के रूप में व्यापक हो जाता है, और माता पिता के LinearLayout एक और माता पिता LinearLayout में खाली स्थान भर जाता है । और voila, यह पूरी तरह से काम करता है!

मुझे पता है, यह हास्यास्पद लगता है, लेकिन इस तरह से मैं इसे बाहर काम किया है ... अगर किसी को कैसे इस बग वैकल्पिक हल के विचार प्राप्त करने की जरूरत है

यहाँ स्रोत कोड है ...

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="10dp" 
    android:gravity="center" 
    android:orientation="horizontal"> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_weight="1" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/pic_grid" 
      android:layout_width="match_parent" 
      android:layout_height="140dp" 
      android:background="#BBB"/> 

    </LinearLayout> 

    <Button 
     android:id="@+id/pic_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/pic_button"/> 

</LinearLayout> 

RecyclerView अब LinearLayout में नि: शुल्क स्थान है, जिसमें RecyclerView के दाईं ओर एक बटन भी शामिल है, और कोई क्रैश नहीं होता है।

किसी को या इस तरह के एक अपवाद का असली कारण एक बेहतर तरीका यह साझा करें ठीक करने के लिए ...

8

मैं बिल्कुल वैसा ही त्रुटि थी के रूप में प्रश्न में और वास्तव में उठाया एक उठाया है पता चल गया तो इसके लिए Google के साथ एक बग। मुझे फ्रेमवर्क कोड में डेल करने के बाद पता चला, कि मैं FALSE से TRUE i.e. "rv.setHasFixedSize (true)" से HasFixedSize की सेटिंग को बदलकर समस्या को हल कर सकता हूं। यह मूल रूप से RecyclerView को बता रहा है कि इसकी सामग्री में परिवर्तन रीसाइक्लिंग व्यू आकार को नहीं बदलेगा जिससे एक पूर्ण लेआउट से परहेज किया जा सके। मैंने मूल रूप से इस अर्थ को गलत तरीके से व्याख्या के कारण सेट किया था। यह परिवर्तन मेरे लिए गलती को हटा देता है और एक पुनरुत्पादन समाधान है।

+0

आपने मेरा दिन बचाया ... !! बहुत बहुत धन्यवाद –

+0

'rv.setHasFixedSize (झूठा); 'चाल चल रही थी। धन्यवाद! – Meet

संबंधित मुद्दे