请不要质疑这个问题的“原因”。我在对原型进行原型设计时遇到了它,因此可能永远不会以发布的版本结束。 但事故发生了,让我感到困扰。
我使用RecyclerView
,横向为LinearLayoutManager
。
我想创建一个巨大的适配器,无限量的项目。所以我做的是:
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
并重复使用这些项目:
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, int position) {
position = position % (items.size() - 1);
...
// set the data
...
我在布局btw中有多个RecyclerView
,只是FYI。
接下来发生的事情是,应用程序在启动时挂起,最后抛出此堆栈跟踪:
E/AndroidRuntime( 3296): java.lang.StackOverflowError
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:411)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
E/AndroidRuntime( 3296): at android.support.v7.widget.ChildHelper$Bucket.insert(ChildHelper.java:401)
...
它不应该与适配器中有多少项目有关,但有些如何,这太多了。是否为每个项目做了一些预备工作?
答案 0 :(得分:0)
我有同样的问题。我只在KitKat上复制了它。我的视图包含带有巨大适配器(Integer.MAX_VALUE)的RecyclerView
来实现某种无限滚动。在KitKat上,我有StackOverflowError
具有相同的堆栈跟踪。我注意到,只有当RecyclerView
被FrameLayout
与layout_weight=0
包裹在一起时,才会发生此错误。所以我只是重写了我的观点以摆脱这个FrameLayout
,现在一切正常。我不确切地知道它为什么会发生以及为什么它只发生在Kitkat,但我认为它与视图尺寸测量有关。希望它会有所帮助。