2017-06-13 93 views
0

我在我的應用程序中使用NestedScrollView,以便在RecyclerView上滾動時隱藏工具欄。問題是,當我將RecyclerView放入NestedScrollView時,RecyclerView的性能非常糟糕,滾動時需要很長時間來加載和停頓。佈局NestedScrollView與RecyclerView導致性能大幅下降

這是我用RecyclerView的片段實現。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark" 
    android:elevation="0dp" 
    android:visibility="gone" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:layout_scrollFlags="scroll|enterAlways"/> 

<android.support.v4.widget.NestedScrollView 
    android:isScrollContainer="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_below="@id/toolbar" 
    android:background="@color/light_gray" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:clickable="true" /> 

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

</RelativeLayout> 

這是碎片進入ViewPager內部。這裏的其他佈局與ViewPager:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/coordinatorLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appBar" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    app:elevation="0dp"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark" 
     android:elevation="0dp" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     app:layout_scrollFlags="scroll|enterAlways"> 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="fill_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:layout_gravity="left|center_vertical" 
      android:layout_weight="1" 
      android:gravity="left|center_vertical" 
      android:text="@string/app_name" 
      android:textAppearance="@style/TextAppearance.Widget.AppCompat.Toolbar.Title" 
      android:textColor="@color/white" 
      android:textSize="18sp"/> 

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

</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/pager" 
    android:layout_below="@id/appBar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="@color/colorPrimary" 
     android:visibility="gone" 
     app:tabIndicatorColor="@android:color/white" 
     app:tabMode="scrollable" 
     app:tabSelectedTextColor="@android:color/white" 
     app:tabIndicatorHeight="3dp" 
     app:tabTextColor="@color/white"/> 

</android.support.v4.view.ViewPager> 

<ProgressBar 
    android:id="@+id/eventsProgress" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center"/> 

<FrameLayout 
    android:id="@+id/search_fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_marginTop="?attr/actionBarSize" 
    /> 

</android.support.design.widget.CoordinatorLayout> 

卸下NestedScrollView和離開RecyclerView獨自導致更好的性能,但當時我沒有隱藏工具欄。

我做錯了什麼?

+0

你在某處使用'CoordinatorLayout'嗎?這個佈局是另一個佈局的一部分還是獨立的? –

+0

是的,對不起。此佈局適用於ViewPager內部的片段。我用ViewPager添加了更多信息和佈局。 – JoeyCK

回答

0

是的,嘗試CoordinatorLayoutAppBarToolbar。通過這種方式,使用正確的scrollBehavior可以在列表滾動時隱藏/摺疊工具欄。

0

當您在滾動視圖中放置回收器視圖時,默認情況下,滾動視圖滾動不起作用而回收器視圖滾動。 要修復它,您可以嘗試android:nestedScrollingEnabled="true" for recyclerView。 希望解決您的問題。

+0

我已經在片段 – JoeyCK

+0

中調用了setNestedScrollingEnabled(false)將它設置爲true:P –

相關問題