6

Ich habe folgendes Haupt-Seitenlayout in meiner App: Seltsames Verhalten des CoordinatorLayout in Verbindung mit 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:layout_width="match_parent" 
    android:layout_height="match_parent"> 

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

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

     <android.support.v7.widget.Toolbar 
      xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/actionToolbar" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" 
      android:minHeight="?attr/actionBarSize" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:title="@string/app_name" 
      app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
      android:background="?attr/colorPrimary" 
      app:layout_scrollFlags="scroll|enterAlways"> 
     </android.support.v7.widget.Toolbar> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
      app:layout_scrollFlags="scroll|enterAlways"> 
     </android.support.design.widget.TabLayout> 
    </android.support.design.widget.AppBarLayout> 
</android.support.design.widget.CoordinatorLayout> 

Der rollbare Inhalt ist der ViewPager. Ich verwende die ViewPager in Verbindung mit dem TabLayout:

ViewPager viewPager = (ViewPager) v.findViewById(R.id.mainPager); 
TabLayout tabLayout = (TabLayout) v.findViewById(R.id.tabLayout); 
tabLayout.setupWithViewPager(viewPager); 
tabLayout.setTabMode(TabLayout.MODE_FIXED); 
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

Alle Fragmente in dem ViewPager des Adapters eine RecyclerView nach innen haben. Wenn ich zuerst den Inhalt des RecyclerViews scrolle (so dass die App-Leiste ausgeblendet ist), dann wechsle zu einer anderen Datenseite im ViewPager und scrolle den RecyclerView-Inhalt nach unten, die App-Leiste ist ... unsichtbar. Die Hauptschritte dieses Problem führen:

  1. auf Geräte mit api Ebene verlauf 11 oder höher (bei Geräten mit api Ebene weniger als 11 alles in Ordnung ist);
  2. Inhalt scrollen;
  3. Wechsel zu einer anderen ViewPager-Seite;
  4. Inhalt scrollen, um die App-Leiste sichtbar zu machen;
  5. App-Leiste ist unsichtbar.

Wo ist mein Problem? Vielen Dank.

EDIT1: Fragment der Symbolleiste Initialisierung

Toolbar toolbar = (Toolbar) view.findViewById(R.id.actionToolbar); 
toolbar.setTitle(toolbarTitleResId); 
toolbar.inflateMenu(menuResId); 
toolbar.setOnMenuItemClickListener(listener); 

EDIT2: Fragment Layout

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

    <android.support.v7.widget.Toolbar 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/actionToolbar" 
     android:layout_height="wrap_content" 
     android:layout_width="match_parent" 
     android:layout_alignParentTop="true" 
     android:minHeight="?attr/actionBarSize" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
     android:background="?attr/colorPrimary"> 
    </android.support.v7.widget.Toolbar> 

    <View 
     android:id="@+id/anchor" 
     android:layout_height="8dp" 
     android:layout_width="match_parent" 
     android:background="@drawable/shadow_gradient_drawable" 
     android:layout_below="@+id/actionToolbar"> 
    </View> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/verticalRecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/anchor"/> 
</RelativeLayout> 
+0

Ich sehe nichts, was in dem Code, den Sie gepostet haben, herausragt. Können Sie den Code für Ihre Symbolleisteninitialisierung innerhalb des Fragments und der Fragmentlayoutdatei hinzufügen? – blackcj

+0

Mit dem hinzugefügten Fragment-Code funktioniert auf meinem API 22-Gerät immer noch alles korrekt. Ich würde empfehlen, den Symbolleisten unterschiedliche IDs zu geben, um Namenskonflikte zu vermeiden, aber selbst mit derselben ID konnte ich das Problem nicht reproduzieren. Wenn du hier mehr Code posten oder das Projekt auf Github setzen könntest, würde ich mich freuen, einen anderen Blick darauf zu werfen. – blackcj

+0

@blackcj, ok, ich werde versuchen, meinen Code sauberer zu machen, und wenn ich den Fehler nicht finde, werde ich ihn auf Github setzen. – vadim

Antwort

8

konnte ich diese 16-Gerät auf meine API reproduzieren (noch keine Probleme auf API 22). Dies ist definitiv ein Fehler in der AppBarLayout, es gibt jedoch eine schnelle Arbeit. Dies ist nur ein Problem, wenn das AppBarLayout vollständig ausgeblendet wird. Fügen Sie eine Ansicht mit 1DP-Höhe zum AppBarLayout hinzu, und alles sollte funktionieren, ohne dass es in der Ansicht wirklich wahrgenommen wird.

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

    <!-- Toolbar and tab bar code --> 
    ... 

    <!-- Add this --> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="@color/colorPrimary" /> 
</android.support.design.widget.AppBarLayout> 
+0

Diese Lösung funktioniert perfekt! Danke für deine Antworten. – vadim

+0

Das funktioniert. Vielen Dank. – rjdthegreat

0

Wir können auch diese Lösung für Umschalten auf eine andere Seite des ViewPager gelten

appBarLayout.setExpanded(true, true); 

Hier 2. Parameter Wenn es wahr ist es AppBarLayout mit Animation erweitern.