NestedScrollView 内的 RecyclerView 导致缓慢加载 and/or 崩溃
RecyclerView inside NestedScrollView causing slow load and/or crashing
我正在使用 RecyclerView,它将用于加载可能的许多图像,我希望在 RecyclerView 上方有一个操作栏,如下所示:
但我也希望操作栏的顶部只有灰色背景。如果用户滚动,它应该像这样完全透明:
我已经通过使用它作为我的布局完成了我想要的(有一个主要问题):
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+)时变慢或无响应。有没有更好的方法来创建我正在寻找的东西?我试过寻找解决方案,但我只能找到 "don't use recyclerviews inside nestedScrollViews",没有提供任何替代解决方案。
如果这也很重要,我正在使用 Glide 将图像加载到每个 ImageView(在 recyclerview 中)。
而且我已经在我的 RecyclerView 上使用它了:
mAlbumRecyclerView.setNestedScrollingEnabled(false);
任何时候在 RecyclerView 上使用 wrap_content
,您都会遇到性能问题。使用 wrap_content
完全抵消了从 回收 视图中获得的性能改进。所以问题是,如何在不使用 wrap_content
.
的情况下做你想做的事
您可以做的一件事是使用 FrameLayout
将 Toolbar
覆盖在 RecyclerView
之上,然后在 RecyclerView
上使用填充(结合android:clipToPadding="false"
) 使事情 出现 从操作栏下方开始。只要您的工具栏具有半透明背景颜色,您的 recyclerview 内容就会在您滚动时显示在其下方。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize"
android:clipToPadding="false"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
tools:listitem="@layout/itemview"/>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#1111"
app:title="Hello world"/>
</FrameLayout>
我正在使用 RecyclerView,它将用于加载可能的许多图像,我希望在 RecyclerView 上方有一个操作栏,如下所示:
但我也希望操作栏的顶部只有灰色背景。如果用户滚动,它应该像这样完全透明:
我已经通过使用它作为我的布局完成了我想要的(有一个主要问题):
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+)时变慢或无响应。有没有更好的方法来创建我正在寻找的东西?我试过寻找解决方案,但我只能找到 "don't use recyclerviews inside nestedScrollViews",没有提供任何替代解决方案。
如果这也很重要,我正在使用 Glide 将图像加载到每个 ImageView(在 recyclerview 中)。
而且我已经在我的 RecyclerView 上使用它了:
mAlbumRecyclerView.setNestedScrollingEnabled(false);
任何时候在 RecyclerView 上使用 wrap_content
,您都会遇到性能问题。使用 wrap_content
完全抵消了从 回收 视图中获得的性能改进。所以问题是,如何在不使用 wrap_content
.
您可以做的一件事是使用 FrameLayout
将 Toolbar
覆盖在 RecyclerView
之上,然后在 RecyclerView
上使用填充(结合android:clipToPadding="false"
) 使事情 出现 从操作栏下方开始。只要您的工具栏具有半透明背景颜色,您的 recyclerview 内容就会在您滚动时显示在其下方。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
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:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingTop="?attr/actionBarSize"
android:clipToPadding="false"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
tools:listitem="@layout/itemview"/>
<android.support.v7.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="#1111"
app:title="Hello world"/>
</FrameLayout>