Java 支持v.23.2.0的RecyclerView的不一致动画中的NullPointerException

Java 支持v.23.2.0的RecyclerView的不一致动画中的NullPointerException,java,android,android-layout,android-recyclerview,Java,Android,Android Layout,Android Recyclerview,在new RecyclerView中,我们可以使用wrap\u content表示高度(或宽度)。所以谷歌修复了这个错误- 但并非所有的事情最终都是好的。 我尝试在从RecyclerView中删除项目时使用不相似的动画。 所以我对任何参数使用Adapter-notifyItemRemoved(int)方法,并使用RecyclerView引起NullPointerException。 Xml代码: ... <RecyclerView android:id="@


在new RecyclerView中,我们可以使用
wrap\u content
表示高度(或宽度)。所以谷歌修复了这个错误-
但并非所有的事情最终都是好的。
我尝试在从RecyclerView中删除项目时使用不相似的动画。 所以我对任何参数使用Adapter-notifyItemRemoved(int)方法,并使用RecyclerView引起NullPointerException。

Xml代码:

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


也许这些问题有临时解决办法?

编辑

我试图在新项目中复制。所以没有抛出异常。也许在我的项目中,还有其他依赖项称之为这个问题。

谷歌已经就支持库23.2版的RecyclerView的使用发表了一些声明

链接到博客帖子(查看RecyclerView部分):

由于此更改,请确保仔细检查项目视图的布局参数:以前忽略的布局参数(如滚动方向上的匹配父项)现在将得到完全尊重


我建议您尝试将RecyclerView的
layout\u height
参数更改为
match\u parent
。让我们知道它是否有效。

我有完全相同的例外。当我向
RecyclerView
添加一个视图,并且该视图完全超出
RecyclerView
的边界时,就会发生这种情况(用户必须滚动才能看到新添加的视图)

但是,我注意到,只有当
RecyclerView
的宽度或高度为
wrap\u content
0dp
线性布局内的权重设置为1时,才会发生此异常。。。如果我将宽度和高度设置为除这两个值之外的任何其他值,即
140dp
match\u parent
,则一切正常

因此,我试图欺骗buggy框架,并找到一种解决方案,将我的
RecyclerView
的宽度设置为与包含
RecyclerView
LinearLayout
中剩余空间一样大(宽度:0dp,重量:1个组合),因此,我将
RecyclerView
包装在另一个
LinearLayout
中,将权重设置为1,并将我的
RecyclerView
的宽度设置为
match\u parent
,这样它就可以像parent
LinearLayout
一样宽,父级
LinearLayout
填充另一个父级
LinearLayout
中的可用空间。瞧,它工作得很好

我知道,这听起来很可笑,但我就是这么想的

如果有人需要了解如何解决此错误,请参阅以下源代码

<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
的右侧也包含一个按钮,并且不会发生崩溃


如果有人发现了此类异常的真正原因或更好的解决方法,请分享…

我的错误与问题中提出的错误完全相同,事实上,我已经为此向谷歌提出了一个错误。在深入研究框架代码之后,我确实发现我可以通过将HasFixedSize的设置从FALSE更改为TRUE来解决这个问题,即“rv.setHasFixedSize(TRUE)”。这基本上是告诉RecyclerView,对其内容的更改不会改变RecyclerView的大小,从而避免了完整的布局。由于对其含义的错误解释,我最初将其设置为FALSE。此更改为我消除了故障,是一种可复制的解决方案。

我遇到了完全相同的问题。我猜这是支持库中的一个bug。除了notify中的默认动画外,我甚至不以任何其他方式为我的条目设置动画。。。方法你可以用一个复制你的问题的示例应用程序创建一个bug报告吗?我也有这个例外。当我尝试将项目添加到
RecyclerView
时会发生这种情况,这些项目必须超出
RecyclerView
的可见部分。它只发生在具有
GridLayoutManager
RecyclerView
上。是的,使用match\u父RecyclerView不会导致异常。但我需要包装内容。是的,我读了一些关于它的讨论,我认为你应该填补一个漏洞,正如yigit所建议的。
<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>