NestedScrollView中的RecyclerView导致加载缓慢和/或崩溃

时间:2018-08-16 23:00:26

标签: android android-recyclerview android-view android-nestedscrollview

我正在使用RecyclerView,它将用于加载可能的许多图像,我希望在RecyclerView上方有一个操作栏,如下所示:

enter image description here

但是我也希望操作栏的顶部只有灰色背景。如果用户滚动,则应该完全透明,如下所示:

enter image description here

通过使用此布局作为我的布局,我已经实现了自己想要的(有一个主要问题):

fragment_recycler_gallery.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

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

    <!-- Gray bar at top -->
    <View
        android:id="@+id/gray_bar"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@null" />

    <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
    </LinearLayout>
</android.support.v4.widget.NestedScrollView>

NestedScrollView是使整个片段(而不是仅RecyclerView)滚动的关键,但是当加载大量图像(500幅以上)时,它会使我的应用变慢或无响应。有没有更好的方法来创建我想要的东西?我曾尝试找到解决方案,但我所能找到的就是在没有提供任何其他解决方案的情况下“不要在nestedScrollViews中使用recyclerviews”。

如果要紧的话,我正在使用Glide将图像加载到每个ImageView中(在recyclerview中)。

我已经在RecyclerView上使用了它:

mAlbumRecyclerView.setNestedScrollingEnabled(false);

1 个答案:

答案 0 :(得分:3)

每次在RecyclerView上使用wrap_content时,您都会遇到性能问题。使用wrap_content会完全破坏您从回收视图获得的性能改进。因此,问题来了,如何在不使用wrap_content的情况下做自己想做的事情。

您可以做的一件事是使用FrameLayoutToolbar顶部覆盖RecyclerView,然后在RecyclerView上使用填充(与{{ 1}}),以使东西出现在操作栏下方开始。只要您的工具栏具有半透明的背景色,滚动时您的recyclerview内容就会显示在其下方。

android:clipToPadding="false"