NullPointerException in dissapearence animation of RecyclerView from support v.23.2.0

后端 未结 3 515
眼角桃花
眼角桃花 2021-01-05 18:09


In new RecyclerView we can use wrap_content for height (or for width). So Google fixed bug - https://code.google.com/p/android/issues/detail?id=74772

相关标签:
3条回答
  • 2021-01-05 18:20

    I have exactly the same exception. It occurs when I add a view to the RecyclerView and that view is completely beyond the boundaries of the RecyclerView (user would have to scroll to see that newly added view).

    However, I've noticed that this exception only occurs when width or height of the RecyclerView is wrap_content or 0dp with weight set to 1 inside a LinearLayout... If I set the width and height to any other value except those two, i.e. 140dp, match_parent, then everything works fine.

    So, I've tried to trick the buggy framework and find a solution to set the width of my RecyclerView to be as big as there are space left inside my LinearLayout that contains the RecyclerView (width:0dp, weight:1 combination), so I wrapped the RecyclerView inside another LinearLayout with weight set to 1, and set my RecyclerView's width to match_parent, so it gets as wide as parent LinearLayout can get, and the parent LinearLayout fills the free space in another parent LinearLayout. And voila, it works perfectly!

    I know, it sounds ridiculous, but that's the way I worked it out...

    Here's the source code if anybody needs to get the idea of how to workaround this bug...

    <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>
    

    The RecyclerView now is as wide as there are free space in the parent LinearLayout, which also contains one button to the right of the RecyclerView, and no crashes occurs.

    If anybody finds out the real cause of such an exception or a better way to fix it, please share...

    0 讨论(0)
  • 2021-01-05 18:27

    I had exactly the same error as the one raised in the question and in fact have raised a bug with Google for this. I did find, after delving into the framework code, that I could resolve the issue by changing the setting of HasFixedSize from FALSE to TRUE i.e. "rv.setHasFixedSize(true)". This is basically telling the RecyclerView that changes to its contents will not change the RecyclerView size thus avoiding a full layout. I had originally set this FALSE due to a mis-interpretation of its meaning. This change removes the fault for me and is a reproducible solution.

    0 讨论(0)
  • 2021-01-05 18:33

    Google has made some statement about the usage of the RecyclerView with the version 23.2 of the Support Library.

    Link to the blog post (check the RecyclerView section): http://android-developers.blogspot.com.br/2016/02/android-support-library-232.html

    Due to this change, make sure to double check the layout parameters of your item views: previously ignored layout parameters (such as MATCH_PARENT in the scroll direction) will now be fully respected.

    I would suggest you to try to change your RecyclerView's layout_height param to match_parent. Let us know if it works.

    0 讨论(0)
提交回复
热议问题