6

Moje XML aktywny jestUkrywanie paska narzędzi w działaniu przez przewijanie widoku recycler wewnątrz Fragmentu?

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

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

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

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="@color/colorPrimary" 
       android:title="@string/app_name" 
       app:layout_scrollFlags="scroll|enterAlways"/> 
     </android.support.design.widget.AppBarLayout> 

     <FrameLayout 
      android:id="@+id/fragmentContainer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      /> 

    </LinearLayout> 


    <android.support.design.widget.NavigationView 
     android:id="@+id/drawerNavigationView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemTextColor="@color/navview_text_color" 
     app:menu="@menu/home_drawer_items_menu"/> 
</android.support.v4.widget.DrawerLayout> 

Moja Fragment XML jest:

<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.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

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

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@android:color/black" 
     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_margin="@dimen/fab_margin" 
     android:clickable="true" 
     android:src="@drawable/ic_plus" 
     android:tint="@android:color/white" 
     app:elevation="5dp" 
     app:layout_anchor="@id/viewPager" 
     app:layout_anchorGravity="bottom|right|end"/> 
</android.support.design.widget.CoordinatorLayout> 

My fragment wykorzystuje tabs i nested fragments wewnątrz ViewPager i mój activity wykorzystuje navigation drawer więc nie mogę przenieść tabs do activity, ponieważ zakładki są potrzebne tylko dla tego konkretnego fragment. A inne fragmenty wymagają tylko toolbar. W tym samym czasie wszystkie fragmenty muszą uzyskać dostęp do navigation drawer.

Teraz to, co chcę zrobić, to w jakiś sposób powiązać app:layout_scrollFlags="scroll|enterAlways" z paskiem narzędzi mojej działalności. Tak więc, gdy przewijam mój RecyclerView wewnątrz fragment w akcji zostaje ukryty.

Byłoby wspaniale, gdybyście mogli wskazać mi właściwy kierunek lub pomóc mi wymyślić, jak to zrobić?

+1

Ta biblioteka może być w stanie Ci pomóc: https: // github.com/ksoichiro/Android-ObservableScrollView –

+0

@ Ben-J dzięki za bibliotekę to wydaje się być dobrym obejściem, ale nadal brakuje animacji, która ma miejsce, gdy używamy 'app: layout_scrollFlags =" scroll | enterAlways "' –

Odpowiedz

0

Rozwiązałem ten problem, chociaż wciąż jest miejsce na drobne ulepszenia, takie jak FAB jest w ruchu do i w dół Ilekroć przewijać RecyclerView wewnątrz Fragment

Aby toolbar reagować na app:layout_scrollFlags="scroll|enterAlways" to co zrobiłem

zmieniłem XML aktywny do:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       android:layout_width="match_parent" 
       android:layout_height="?attr/actionBarSize" 
       android:background="@color/colorPrimary" 
       android:title="@string/app_name" 
       app:layout_scrollFlags="scroll|enterAlways"/> 
     </android.support.design.widget.AppBarLayout> 

     <FrameLayout 
      android:id="@+id/fragmentContainer" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      app:layout_behavior="@string/appbar_scrolling_view_behavior" 
      /> 
    </android.support.design.widget.CoordinatorLayout> 


    <android.support.design.widget.NavigationView 
     android:id="@+id/drawerNavigationView" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     app:itemTextColor="@color/navview_text_color" 
     app:menu="@menu/home_drawer_items_menu"/> 
</android.support.v4.widget.DrawerLayout> 

Także zmieniłem Fragment XML do:

<LinearLayout 
    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:orientation="vertical"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0"> 

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

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

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1"> 

     <android.support.v4.view.ViewPager 
      android:id="@+id/viewPager" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="@android:color/black"/> 

     <android.support.design.widget.FloatingActionButton 
      android:id="@+id/fab" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:layout_marginBottom="60dp" 
      android:layout_marginEnd="20dp" 
      android:layout_marginRight="20dp" 
      android:clickable="true" 
      android:src="@drawable/ic_plus" 
      android:tint="@android:color/white" 
      app:elevation="5dp"/> 
    </RelativeLayout> 
</LinearLayout> 
+0

aplikacja: layout_scrollFlags = "scroll | enterAlways" dodanie tego do układu kontenera sprawi, że kontener zostanie przetłumaczony w dół, więc każdy widok grawitacji dołu wewnątrz fragmentów nie będzie już widoczny; ( – Sjd

0

Jeśli rozumiem Twoje pytanie poprawnie, co można zrobić, to

1) obejmują pasku narzędzi i NavigationDrawer w MainActivity więc będzie dostępny we wszystkich fragmentach zbyt.

2) obejmują występy w tylko w ParentFragment który zawiera ViewPager do innych fragmentów

z tym podejściem Google Toolbar i NavigationDrawer będą widoczne we wszystkich fragmentach podczas klapki tylko w ParentFragment

Nadzieja pomaga

+0

co powiedziałeś , już to zrobiłem. Przeczytaj ponownie pytanie. Chcę ukryć pasek narzędzi podczas przewijania widoku recyclerview w fragmencie. –

+0

dlaczego nie używasz [onScrollListener] (http://developer.android.com/intl/es/reference/android/support/v7/widget/RecyclerView.OnScrollListener.html)? – Max

+0

Używam tego na razie, ale to wciąż nie daje mi gładkiej animacji, że 'app: layout_scrollFlags =" scroll | enterAlways "' daje mi –

0

Wystąpił również ten problem. Ale znaleziono rozwiązanie. Rozwiązanie z poprawką xml nie może być, więc trzeba to zrobić programowo. Wszystko, czego potrzebujemy, to Inflater. Tak, tak, to takie proste. W locie zmień xml, aby obsługiwał wszystkie przewijanie. Inflate/AddView/RemoveView - to wszystko, czego potrzebujesz!