Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android GridLayoutManager中可能存在的错误?_Android_Android Recyclerview - Fatal编程技术网

Android GridLayoutManager中可能存在的错误?

Android GridLayoutManager中可能存在的错误?,android,android-recyclerview,Android,Android Recyclerview,我在AndroidsGridLayoutManager中遇到了我怀疑的一个bug。我有一个简单的设置:一个RecyclerView使用GridLayoutManager和一个SpanSizeLookup(下面的代码)。布局管理器中使用的列数是可变的;由屏幕大小和屏幕方向决定 我初始化布局管理器,如下所示: layoutManager = new GridLayoutManager(getContext(), getResources().getInt

我在Androids
GridLayoutManager
中遇到了我怀疑的一个bug。我有一个简单的设置:一个
RecyclerView
使用
GridLayoutManager
和一个
SpanSizeLookup
(下面的代码)。布局管理器中使用的列数是可变的;由屏幕大小和屏幕方向决定

我初始化布局管理器,如下所示:

    layoutManager = new GridLayoutManager(getContext(),
                   getResources().getInteger(R.integer.products_per_row));
    recyclerView.setLayoutManager(layoutManager);
我的
SpanSizeLookup
使用以下
getSpanSize
方法

    @Override
    public int getSpanSize(int position) {
        return position == 0 ? 
            getResources().getInteger(R.integer.products_per_row)) : 1;
    }
Android的一切都如预期的那样工作:当屏幕旋转时,列数会相应地变化,不会出现崩溃。但是,如果屏幕是纵向的,并且用户启动了一个活动(例如,通过通知打开一个应用程序),该活动会强制其指向横向,则会出现以下崩溃:

java.lang.IllegalArgumentException: Item at position 0 requires 2 spans but GridLayoutManager has only 1 spans.
   at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:430)
   at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1334)
   at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
   at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171)
   at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2847)
   at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3145)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1627)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1669)
   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
   at android.widget.LinearLayout.onLayout(LinearLayout.java:1440)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
   at android.view.View.layout(View.java:14565)
   at android.view.ViewGroup.layout(ViewGroup.java:4473)
   at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2185)
   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1999)
   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1212)
   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4981)
   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:791)
   at android.view.Choreographer.doCallbacks(Choreographer.java:591)
   at android.view.Choreographer.doFrame(Choreographer.java:561)
   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:777)
   at android.os.Handler.handleCallback(Handler.java:725)
   at android.os.Handler.dispatchMessage(Handler.java:92)
   at android.os.Looper.loop(Looper.java:137)
   at android.app.ActivityThread.main(ActivityThread.java:5306)
   at java.lang.reflect.Method.invokeNative(Method.java)
   at java.lang.reflect.Method.invoke(Method.java:511)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
   at dalvik.system.NativeStart.main(NativeStart.java)
为了绝对清晰:对于纵向“正常”屏幕大小的设备,R.integer.products每行为1,在这种情况下,横向为2


现在,我完全承认这可能是我的代码中的一个错误,但我看不出我在这里做错了什么。

设置gridLayoutManager的跨度大小似乎可以解决问题。