困扰了3年的问题,常见布局,RV嵌套的问题

img

困扰自己3年的问题了。想咨询一下同学们。

以前用NestedScrollView嵌套RV,RV无法复用,数据量大必卡顿。后来也明白了卡顿的原因。2020年的时候,百度,CSDN上没有找到解决办法。也就搁浅在哪里了。

人菜瘾大技术差,这不又上瘾了,Fragment页里,想用一个RV里面嵌套4RV去实现。同样遇到无法复用的问题。

在大厂里都怎么去实现这类经典布局呢?

NestedScrollView嵌套RecyclerView,会导致RecyclerView的复用性降低,性能问题可能会出现卡顿。这是因为NestedScrollView和RecyclerView之间的滚动事件会有冲突,导致RecyclerView无法正确地进行重用。

在大厂里,常见的解决方案是使用另一种布局来代替NestedScrollView。例如,可以使用CoordinatorLayout和AppBarLayout来实现带有滚动效果的布局。具体来说,可以将AppBarLayout包含在CoordinatorLayout中,然后将RecyclerView放在AppBarLayout下面。这样,RecyclerView就能处理滚动事件而不会受到NestedScrollView的干扰。

另一种方法就是使用Androidx的NestedScrollingParent3来代替 NestedScrollView

如果是在一个Fragment里面嵌套4个RecyclerView,你可以考虑将每个RecyclerView放在单独的Fragment里面,然后在包含这些Fragment的父Fragment中使用ViewPager进行页面切换。这样,每个RecyclerView就能独立处理滚动事件,而不会受到其他RecyclerView的干扰。下面是一个使用CoordinatorLayout和AppBarLayout来实现带有滚动效果的布局的例子:

<androidx.coordinatorlayout.widget.CoordinatorLayout>

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize" />

    </com.google.android.material.appbar.AppBarLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

这里,CoordinatorLayout是父布局,AppBarLayout和RecyclerView是子布局。AppBarLayout包含了一个Toolbar,它将会滚动出屏幕。RecyclerView的layout_behavior属性设置为"appbar_scrolling_view_behavior",这样RecyclerView就能正确地处理滚动事件,与AppBarLayout联动.

此外可以考虑使用一个RecyclerView嵌套另外一个RecyclerView,使用方法类似,只需要使用内部的RecyclerView去代替AppbarLayout就行了.

需要注意的是,上面的例子只是提供一种思路,具体实现还需要根据你的需求来进行修改.

大厂如华为, Tab 页签下面用竖向的 RecycleView,里面的每个卡片标题加横向列表,是一个 Fragment,这个 Fragment 里面用的横向的 Recycleview。
把 Fragment 放到 Recycleview 的 Item 中。

感谢两位大哥的指点,我先去试一下。