45

我使用android.support.design的視圖CoordinatorLayout。我想將app:layout_behavior附加到片段的RecyclerView使用ViewPager的RecyclerView的CoordinatorLayout

在Google給出的示例中,它們只將其附加在與CoordinatorLayout連接的同一個XML文件的RecyclerView中。

有沒有辦法將CoordinatorLayout附加到片段的RecyclerViewViewPager

樣本位於Android Developers博客的this blog post

+0

你如何解決?我也面臨同樣的問題http://stackoverflow.com/questions/32288013/failed-to-load-fragments-when-tabs-viewpager-inside-scrollview – Erum

回答

48

Chris Banes在Github上發佈了一個示例,其中顯示了您想要執行的操作。

以下是定義如何間接將協調器佈局附加到viewpager的片段的xml文件。

<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/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

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

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 

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

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

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="end|bottom" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@drawable/ic_done" /> 

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

這個想法是讓viewpager擁有layout_behavior屬性。

+4

你有鏈接到github嗎? – pablobaldez

+8

https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/res/layout/include_list_viewpager.xml – androholic

+0

@androholic如何解決? http://stackoverflow.com/questions/32288013/failed-to-load-fragments-when-tabs-viewpager-inside-scrollview – Erum

-1

我遇到了同樣的問題,我解決了滾動問題,但將工具欄和選項卡放入應用程序欄中,並用Coordinatorlayout將其包裝並放入Viewpager。 同樣在我的回收視圖(要膨脹)的佈局中,我添加了layout_behavior。它有效,但問題是一切都在彼此之上。

這是我的主網頁

<android.support.design.widget.CoordinatorLayout 

    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_above="@+id/music_foot" 

    > 
    <android.support.v4.view.ViewPager 

     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/view_pager" 
     /> 
    <view 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     class="android.support.design.widget.AppBarLayout" 
     android:id="@+id/appBar" 
     > 
<android.support.v7.widget.Toolbar 
     android:layout_width="match_parent" 
     android:layout_height="56dp" 
     android:background="#1e88e5" 
     android:id="@+id/toolbar" 
     app:layout_scrollFlags="scroll|enterAlways" 
     ></android.support.v7.widget.Toolbar> 
     <view 
      android:layout_width="match_parent" 
      android:layout_height="56dp" 
      class="com.astuetz.PagerSlidingTabStrip" 
      android:id="@+id/pager_tabs" 
      android:layout_below="@+id/appBar" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" /> 
    </view> 

,這是我的適配器

<android.support.v7.widget.RecyclerView 

    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" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     android:id="@+id/recycleView" /> 

佈局如果我得到它的工作更好地我會告訴你。

6

使用FrameLayout並將你的片段注入到FrameLayout中。然後設置 app:layout_behavior。您需要做的唯一事情是將layout_behavior 設置爲AppBayLayout的兄弟,並且該兄弟會位於工具欄下方。

<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/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

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

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

<FrameLayout 
    android:id="@+id/frame" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

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

它被測試?我的意思是我有一個類似的佈局,但工具欄不響應我的片段內的viewpager的滾動事件(即注入到FrameLayout中) –

+0

@Jam不適用於我 –

+4

當Framelayout時,CoordinatorLayout根本不滾動包含一個回收站視圖。 – Roadblock

14

這可能是愚蠢的,但它沒有奏效,因爲構建工具沒有在應用程序版本的build.gradle中更新到22,我使用了21,這就是爲什麼它不能按預期工作是。

編輯:

還什麼SanderTuit說:加入com.android.support:recyclerview-v7:22.2.0也將解決這個問題

+12

我想補充一點,你還需要最新的RecyclerView:com.android.support:recyclerview-v7:22.2.0。 – SanderTuit

+0

保存我的一天!謝謝! –

+0

有沒有一種方法可以保持所有支持庫在最新版本,而無需每次編輯build.gradle? –

1

幾個測試後,我發現,把TabLayout AppBarLayout外,將作品,無論viewpager的片段包含。這是我的主要xml。

<com.tqmall.legend.konwledge.view.VerticalSwipeRefreshLayout  xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/swipe_refreshLayout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/coordinator_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#FFE6ECF0"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/kn_main_appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:contentScrim="@android:color/black" 
      app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

      <include 
       layout="@layout/banner_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:layout_collapseMode="parallax" 
       app:layout_collapseParallaxMultiplier="0.9" /> 

      <android.support.v7.widget.Toolbar 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:layout_gravity="bottom" 
       android:background="#33000000" 
       app:layout_collapseMode="parallax" 
       app:layout_collapseParallaxMultiplier="0" 
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

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

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

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

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/main_fragment_issue_list_tab" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      app:tabGravity="center" 
      app:tabIndicatorColor="#FF2CA2D5" 
      app:tabPaddingEnd="30sp" 
      app:tabPaddingStart="30sp" 
      app:tabSelectedTextColor="#FF2CA2D5" 
      app:tabTextColor="#FF4F5354" /> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/main_fragment_issue_list_pager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 
    </LinearLayout> 
+0

雖然此鏈接可能回答問題,最好在這裏包括答案的重要部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

@JeremyHuddlestonSequoia謝謝你:-),我會編輯它。 –

+0

如何使用viewpager圖像和recyclerview設計帶有coordinatetoolbar的Flipkart HomeScreen設計searchview佈局設計 – Harsha

3

我最近在帖子中提到了同樣的問題,上面的解決方案不適合我。幸運的是我設法解決了它。所以只是分享我在這裏發帖

的問題是,在我的代碼我已成立

recyclerView.setNestedScrollingEnabled(false); 

由於該appbar沒有,儘管設置layout_behaviour屬性的viewPager迴應recyclerView的卷軸。將上述屬性更改爲

recyclerView.setNestedScrollingEnabled(true); 

解決了問題,appbar開始響應recylerView的滾動。

+0

U保存了我的一天。我很笨。我有相同的代碼。我插入時甚至不知道代碼是什麼。如果'RecyclerView'包裝了'NestedScrollView',則需要'setNestedScrollingEnabled',但它會刪除'RecyclerView'的回收函數。 – wonsuc

相關問題