2016-05-09 3 views
-1

Я хочу отобразить Viewpager, который прокручивается, когда RecyclerView, который я разместил ниже, прокручивается вверх.Отобразите Viewpager, который прокручивается вместе с RecyclerView

Информация, отображаемая в RecyclerView, зависит от страницы, отображаемой в представлении. Над Viewpager находится панель инструментов.

Это макет, я использую:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinatorLayout" 
    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" 
    tools:context=".main.MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <TextView 
       android:id="@+id/toolbarTitle" 
       android:layout_width="wrap_content" 
       android:layout_height="?attr/actionBarSize" 
       android:gravity="center_vertical" 
       android:textColor="@color/text_white" 
       android:textSize="18sp" 
       android:textStyle="bold"/> 
     </android.support.v7.widget.Toolbar> 

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

    <ScrollView 
     android:id="@+id/scrollView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="false" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

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

      <com.pixplicity.multiviewpager.MultiViewPager 
       android:id="@+id/pager" 
       android:layout_width="match_parent" 
       android:layout_height="220dp" 
       android:background="@color/black" 
       app:matchChildWidth="@+id/page"/> 

      <FrameLayout 
       android:id="@+id/frameLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"/> 
     </LinearLayout> 
    </ScrollView> 
</android.support.design.widget.CoordinatorLayout> 

Примечание: MultiViewPager является ViewPager, который отображает часть предыдущих и последующих страницах.

Когда выбрана страница, я заменяю рамную рамку фрагментом, содержащим RecyclerView. Схема фрагмента выглядит следующим образом:

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

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <TextView 
     android:id="@+id/emptyView" 
     style="@style/no_data" 
     android:text="@string/movements_no_data" 
     android:visibility="gone"/> 
</FrameLayout> 

Althought, кажется, работает в KitKat, когда я пытаюсь его на Зефир поведение странно: свиток перемещает ViewPager по-другому, что RecyclerView.

Примечание 2: в Kitkat мне нужно заставить свиток сбросить свое положение, когда приложение запустится, потому что свиток сначала смещается из TOP. Код я использую для обнуления является:

scrollView.post(new Runnable() { 
     public void run() { 
      scrollView.fullScroll(View.FOCUS_UP); 
     } 
    }); 

Любое другое расположение предложения или идеи о том, как реализовать эту схему будут оценены.

+0

Добавить требуемый макет в качестве заголовка в ваш recyclerView –

+0

Отредактировано в соответствии с предложением. – Fer

ответ

0

Я решил эту проблему, установив ViewPager внутри CollapsingToolbarLayout.

<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"> 

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

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

     <com.pixplicity.multiviewpager.MultiViewPager 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:layout_height="210dp" 
      android:layout_marginTop="@dimen/pager_margin_top" 
      app:layout_collapseMode="parallax" 
      app:matchChildWidth="@+id/page"/> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_collapseMode="pin" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

      <TextView 
       android:id="@+id/toolbarTitle" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:gravity="center_vertical" 
       android:shadowColor="#000" 
       android:shadowDx="2" 
       android:shadowDy="2" 
       android:shadowRadius="2" 
       android:textColor="#fff" 
       android:textSize="18sp" 
       android:textStyle="bold"/> 
     </android.support.v7.widget.Toolbar> 

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

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

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

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

Попробуйте NestedScrollView вместо ScrollView. Это, как говорится, вам не нужно, если внутри прокрутки вы используете RecyclerView. Вы можете назначить поведение панели приложений прокрутки непосредственно в RecyclerView, и она будет управлять прокруткой и сбрасыванием панели приложений. Обратите внимание, что если вы используете NestedScrollView, вам, вероятно, потребуется установить его для заполнения порта представления для повышения производительности и просмотра.

Смежные вопросы