我正在使用RecyclerView(com.
android.support:recyclerview-v7:21.0.2)和GridLayoutManager并应用
dynamic column count.当滚动视图时,抛出异常.当RecyclerView即将显示之前未显示的项目(重用或重新绑定)时,似乎发生了错误.但是,如果我不使用这样的动态范围/列计数或只是注释调用GridLayoutManager.setSpanCount的行,则不会发生.
我试过检查source code,看来这个问题与临时数组mSet有关.
E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.Arrayindexoutofboundsexception at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:361) at android.support.v7.widget.linearlayoutmanager.fill(linearlayoutmanager.java:1269) at android.support.v7.widget.linearlayoutmanager.scrollBy(linearlayoutmanager.java:1097) at android.support.v7.widget.linearlayoutmanager.scrollVerticallyBy(linearlayoutmanager.java:957) at android.support.v7.widget.RecyclerView.scrollByInternal(RecyclerView.java:985) at android.support.v7.widget.RecyclerView.onTouchEvent(RecyclerView.java:1686) at android.view.View.dispatchTouchEvent(View.java:3885) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:903) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:942) at com.android.internal.policy.impl.PhoneWindow$DecorView.superdispatchTouchEvent(PhoneWindow.java:1691) at com.android.internal.policy.impl.PhoneWindow.superdispatchTouchEvent(PhoneWindow.java:1125) at android.app.Activity.dispatchTouchEvent(Activity.java:2096) at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1675) at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2194) at android.view.ViewRoot.handleMessage(ViewRoot.java:1878) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method)
解决方法
我解决此问题的方法是调整mSet大小.是通过扩展GridLayoutManager来实现的.
package android.support.v7.widget; import android.content.Context; import android.view.View; public class MyGridLayoutManager extends GridLayoutManager { public MyGridLayoutManager(Context context,int spanCount) { super(context,spanCount); } public MyGridLayoutManager(Context context,int spanCount,int orientation,boolean reverseLayout) { super(context,spanCount,orientation,reverseLayout); } @Override public void setSpanCount(int spanCount) { super.setSpanCount(spanCount); if (mSet != null && mSet.length != spanCount) { View[] newSet = new View[spanCount]; System.arraycopy(mSet,newSet,Math.min(mSet.length,spanCount)); mSet = newSet; } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。