删除最后一项时,Recyclerview 崩溃。NullPointerException:android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()

Recyclerview crashes when removing last item. NullPointerException: android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()

提问人:HaloMediaz 提问时间:5/12/2015 更新时间:6/30/2016 访问量:2189

问:

我有一个recyclerview,它是使用arraylist填充的。当我从列表中删除一个项目时,它工作正常,直到最后一个项目被删除。下面是在我的 recyclerview 适配器中找到的代码,用于删除项目。

public void removeItem(int position) {
        itemsData.remove(position);
        notifyItemRemoved(position);
    }

下面是崩溃日志。日志不会将我定向到代码中的指定位置。所以我不确定是什么导致了这个问题。

我做了一些测试并记录了位置。如果我将一个项目添加到数组列表中,并且在 recyclerview 中,添加的项目的位置为 0。如果我单击添加的项目,则位置为 0,如果我删除该项目,我会在位置 0 处删除它,但在删除位置为 0 的项目时它崩溃了。notifyItemInserted

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.ViewGroup$LayoutParams android.view.View.getLayoutParams()” 在 android.support.v7.widget.OrientationHelper$2.getDecoratedStart(OrientationHelper.java:316) 在android.support.v7.widget.LinearLayoutManager.findOneVisibleChild(LinearLayoutManager.java:1633) 在 android.support.v7.widget.LinearLayoutManager.findFirstVisibleChildClosestToStart(LinearLayoutManager.java:1453) 在 android.support.v7.widget.LinearLayoutManager.computeScrollOffset(LinearLayoutManager.java:997) 在 android.support.v7.widget.LinearLayoutManager.computeVerticalScrollOffset(LinearLayoutManager.java:969) 在 android.support.v7.widget.RecyclerView.computeVerticalScrollOffset(RecyclerView.java:1175) 在 android.view.View.canScrollVertically(View.java:12835) 在 android.support.v4.view.ViewCompatICS.canScrollVertically(ViewCompatICS.java:35) 在 android.support.v4.view.ViewCompat$ICSViewCompatImpl.canScrollVertically(ViewCompat.java:1136) 在 android.support.v4.view.ViewCompat.canScrollVertically(ViewCompat.java:1528) 在 android.support.v7.widget.RecyclerView$LayoutManager.onInitializeAccessibilityEvent(RecyclerView.java:6594) 在 android.support.v7.widget.RecyclerView$LayoutManager.onInitializeAccessibilityEvent(RecyclerView.java:6573) 在 android.support.v7.widget.LinearLayoutManager.onInitializeAccessibilityEvent(LinearLayoutManager.java:204) 在 android.support.v7.widget.RecyclerViewAccessibilityDelegate.onInitializeAccessibilityEvent(RecyclerViewAccessibilityDelegate.java:66) 在 android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:228) 在 android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.onInitializeAccessibilityEvent(AccessibilityDelegateCompatJellyBean.java:56) 在 android.view.View.onInitializeAccessibilityEvent(View.java:5439) 在 android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5312) 在 android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:20823) 在 android.support.v4.view.AccessibilityDelegateCompatIcs.sendAccessibilityEventUnchecked(AccessibilityDelegateCompatIcs.java:117) 在 android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateIcsImpl.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:210) 在 android.support.v4.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:358) 在 android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:255) 在 android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.sendAccessibilityEventUnchecked(AccessibilityDelegateCompatJellyBean.java:82) 在 android.view.View.sendAccessibilityEventUnchecked(View.java:5297) 在 android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.run(ViewRootImpl.java:6934) 在 android.view.ViewRootImpl$SendWindowContentChangedAccessibilityEvent.runOrPost(ViewRootImpl.java:6960) 在 android.view.ViewRootImpl.postSendWindowContentChangedCallback(ViewRootImpl.java:6161) 在 android.view.ViewRootImpl.notifySubtreeAccessibilityStateChanged(ViewRootImpl.java:6274) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(ViewGroup.java:2772) 在 android.view.ViewGroup.notifySubtreeAccessibilityStateChanged(

非常感谢任何帮助,谢谢!

null 崩溃 android-recyclerview

评论

0赞 mehdok 8/28/2015
你找到什么解决方案吗?我在使用时也有同样的问题,但是使用时没有问题notifyItemRemovednotifyDataSetChanged
0赞 HaloMediaz 8/29/2015
不。可悲的是,我没有:(对不起,马/先生

答:

-1赞 Addepalli Jeevan 6/30/2016 #1

勾选“not null”,应该没问题。像这样的东西:

public void removeItem(int position) {
       if(itemsData != null){
        itemsData.remove(position);
        notifyItemRemoved(position);
       }
}

希望这会有所帮助。