我对GridLayoutManger setSpanSizeLookup有一个问题,当活动的方向发生变化时,我会在检查特定位置是否是某种类型的同时更改span计数,这完全适用于方向更改,我唯一的问题是,我使用zxing库进行条形码扫描,每当单击button时,我将打开zxing的默认意图并从中检索日期,但是当zxing打开时,它会转到landscape,而我当前的活动方向是portrait --这给了我在只打开d9意图时布局管理抛出的IllegalArgumentException,崩溃日志如下所示
java.lang.IllegalArgumentException: Item at position 0 requires 2 spans but GridLayoutManager has only 1 spans.
这个问题不会发生,如果我旋转手机,只有当我启动Xzing意图,我不知道如何解决这个问题,因为它困扰我。这是我的spanSizeLookup -
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return adapter.getHolders().get(position).getLabelHolder() != null ? getResources().getInteger(R.integer.span) : 1;
}
});span是基于屏幕大小的,所以它可以是1-2,2-3和3-4.重复一遍,这不会给我任何方向改变错误,只有当我打开zxing时才会发生错误
如果我打开zxing intent,而我的活动在landspace上,则不会发生崩溃。
编辑
似乎只有启动zxing的默认意图导致了这个问题,我有一个activity,它在启动之后就会出现landscape,而exception没有发生,作为解决办法,我创建了一个activity,它可以在延迟1秒内处理barcode扫描,以启动intent,就好像我没有这样做一样,它会抛出相同的exception。
编辑2
我刚刚发现,即使没有setSpanSpizeLookup,崩溃仍然会发生。只需打电话给manager.setSpanCount(getResources().getInteger(R.integer.span))
发布于 2016-12-21 14:34:54
要回答这个问题为时已晚,然而,在我最近从事的一个项目中,我遇到了同样的问题&经过一些真正的调试之后,我发现问题的原因是什么,但不知道原因是什么。
zxing Library intent在调用startActivityForResult之前实际上调用了CLEAR_TOP &这就是问题所在,在修改了zxing Intent的源代码以删除该特定行之后,崩溃就消失了。
发布于 2015-08-15 08:51:10
下面是在GridLayoutManager.layoutChunk()中抛出异常的源代码
final int spanSize = getSpanSize(recycler, state, pos);
if (spanSize > mSpanCount) {
throw new IllegalArgumentException("Item at position " + pos + " requires " +
spanSize + " spans but GridLayoutManager has only " + mSpanCount
+ " spans.");
}你的spanSize比你的spanCount大吗?尝试调试并可能更改您的spanCount,看看它是如何工作的。
-更新
有几种方法可以在列表和网格之间切换。
LayoutManager.requestLayout()后调用spanCount。否则你的应用程序可能会崩溃。notifyDataSetChanged或requestLayout,也不会崩溃发布于 2015-08-15 06:42:37
编辑:调用setSpanCount()并使其成为一个比这个跨度更大的数字,不是吗?也许会有更多的代码出现。
听起来可能是并发修改错误。不要每次使用延迟,而是在UI线程上运行修改。这将阻止UI尝试访问列表。
if(adapter.getHolders().get(position).getLabelHolder() != null)
return getResources().getInteger(R.integer.column);
else
return 1;那么getResources().getInteger(R.integer.column)是什么?
不是每次都是同一个号码吗?
https://stackoverflow.com/questions/31884809
复制相似问题