回收程序 视图在嵌套滚动视图中加载大型数据的速度非常慢

我已经在我的.基本上,我希望RecyclerView与其他视图一起滚动。我面临的问题是,对于一小组数据,它工作正常,但是对于一大组数据(200个条目),每当我启动活动时,它都会冻结约3-5秒,然后加载。我删除了,它完美地工作,但它没有为我提供我想要的行为。RecyclerViewNestedScrollViewNestedScrollView

(有关其他信息,我正在从SQLite数据库加载数据。滚动没有问题,因为它很流畅。唯一的问题是活动冻结了一段时间)

<android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <... Some other Views ...>

                <android.support.v7.widget.RecyclerView
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:orientation="vertical">

                </android.support.v7.widget.RecyclerView>

            </LinearLayout>

        </android.support.v4.widget.NestedScrollView>

答案 1

这种情况的内.RecyclerViewNestedScrollView

RecyclerView是调用时间等于您的数据大小。onCreateViewHolder()

如果数据有 200 个项目,它将冻结 200 次。onCreateViewHolder()


答案 2

如上所述,问题在于 RecyclerView 作为 NestedScrollView 中的子项或子项,当您使用WRAP_CONTENT或MATCH_PARENT作为 RecyclerView 的高度时,将其高度测量为不定式。

为我解决这个问题的一个解决方案是将RecyclatorView Height设置为固定大小。您可以将高度设置为 dp 值,或者如果您的要求需要垂直不定式 RecyclerView,则可以将其设置为与设备高度匹配的像素值。

这是一个用于设置回收器的代码片段在 kotlin 中查看大小

    val params = recyclerView.layoutParams
    params.apply {
            width = context.resources.displayMetrics.widthPixels
            height = context.resources.displayMetrics.heightPixels
    }
    recyclerView.layoutParams = params

推荐