RecyclerView不应该有太多项目?

时间:2015-01-29 09:05:13

标签: android android-recyclerview

请不要质疑这个问题的“原因”。我在对原型进行原型设计时遇到了它,因此可能永远不会以发布的版本结束。 但事故发生了,让我感到困扰。

我使用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)
...

它不应该与适配器中有多少项目有关,但有些如何,这太多了。是否为每个项目做了一些预备工作?

1 个答案:

答案 0 :(得分:0)

我有同样的问题。我只在KitKat上复制了它。我的视图包含带有巨大适配器(Integer.MAX_VALUE)的RecyclerView来实现某种无限滚动。在KitKat上,我有StackOverflowError具有相同的堆栈跟踪。我注意到,只有当RecyclerViewFrameLayoutlayout_weight=0包裹在一起时,才会发生此错误。所以我只是重写了我的观点以摆脱这个FrameLayout,现在一切正常。我不确切地知道它为什么会发生以及为什么它只发生在Kitkat,但我认为它与视图尺寸测量有关。希望它会有所帮助。