使用StaggeredGridLayoutManager遇见的坑

使用StaggeredGridLayoutManager时,在手势拉伸操作中遇到了应用程序崩溃的问题。错误提示为IndexOutOfBoundsException。解决方法是将StaggeredGridLayoutManager替换为原生的GridLayoutManager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用StaggeredGridLayoutManager 当手势拉伸时,会有崩溃事件发生

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.VERTICAL));

错误如下:

  java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
                                                                                 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255)
                                                                                 at java.util.ArrayList.get(ArrayList.java:308)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager$Span.calculateCachedStart


(StaggeredGridLayoutManager.java:2362)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager$Span.getStartLine


(StaggeredGridLayoutManager.java:2379)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager.checkSpanForGap


(StaggeredGridLayoutManager.java:382)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager.hasGapsToFix


(StaggeredGridLayoutManager.java:331)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager.checkForGaps


(StaggeredGridLayoutManager.java:258)
                                                                                 at android.support.v7.widget.StaggeredGridLayoutManager.onScrollStateChanged


(StaggeredGridLayoutManager.java:293)
                                                                                 at android.support.v7.widget.RecyclerView.dispatchOnScrollStateChanged(RecyclerView.java:3971)
                                                                                 at android.support.v7.widget.RecyclerView.setScrollState(RecyclerView.java:1194)
                                                                                 at android.support.v7.widget.RecyclerView.cancelTouch(RecyclerView.java:2511)
                                                                                 at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:2489)
                                                                                 at android.view.View.dispatchTouchEvent(View.java:9328)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2538)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2250)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2540)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2540)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2540)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2540)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2570)
                                                                                 at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2264)
                                                                                 at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent


(PhoneWindow.java:2452)
                                                                                 at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1749)
                                                                                 at android.app.Activity.dispatchTouchEvent(Activity.java:2927)
                                                                                 at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2405)
                                                                                 at android.view.View.dispatchPointerEvent(View.java:9548)
                                                                                 at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4503)
                                                                                 at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4301)
                                                                                 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3811)
                                                                                 at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3871)
                                                                                 at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3830)
                                                                                 at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3978)
                                                                                 at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3838)
                                                                                 at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4035)
                                                                                 at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3811)
                                                                              at android.view.View
                                                                             
                                                                             --------- beginning of system

解决方案:

换成recyclerview原生的GridLayoutManager

recyclerView.setLayoutManager(new GridLayoutManager(getActivity(),5));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值