2015-06-24 5 views
8

Ich habe den folgenden Code in meiner Tätigkeit:AppBarLayout, NestedScrollView, FrameLayout, was ist das Geschäft?

<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="160dp"> 

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

      <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" 
       app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

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

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

    <android.support.v4.widget.NestedScrollView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fillViewport="true" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
     <FrameLayout 
      android:id="@+id/main_content" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
     </FrameLayout> 
    </android.support.v4.widget.NestedScrollView> 

Ich möchte innerhalb eines Fragment mit einem RecyclerView hinzuzufügen, in dem Rahmen-Layout ("main_content" id Layout), aber in diesem Fall tut dies nicht Arbeit.

Was ist das Problem? kennst du ein Beispiel?

+3

Schauen Sie sich dieses Handbuch http://inthecheesefactory.com/blog/android-design-support-library-codelab/en und sehen, ob es hilft – EpicPandaForce

+2

"es funktioniert nicht" bedeutet nichts. –

+0

Sie sollten keine Ansicht haben, die eine eigene Bildlaufansicht in einer anderen Ansicht hat, die auch eine eigene Bildlaufansicht hat, aber sehen Sie, ob diese Antwort Ihnen hilft [verschachtelte Bildlaufansicht] (http://stackoverflow.com/questions/4490821/scrollview- Inside-scrollview) – Jhonatas

Antwort

11

Die reduzierende Symbolleiste sollte ein einzelnes Scrollziel haben. Wenn Sie den Inhalt ersetzen, sollten Sie den Scroll-Container ersetzen und nicht verschachteln. Zum Beispiel:

<android.support.design.widget.CoordinatorLayout 
    android:id="@+id/coordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_container" 
     android:background="@color/colorPrimary" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"> 
     <android.support.v4.widget.NestedScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:fillViewport="true"> 
      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="vertical"> 
       <!-- Your content here --> 
      </LinearLayout> 
     </android.support.v4.widget.NestedScrollView> 
    </FrameLayout> 

    <include 
     layout="@layout/toolbar"/> 

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

können Sie rufen:

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 

PageRecycle recycle = PageRecycle.create(); 
ft.replace(R.id.main_container, recycle); 
ft.commit(); 

Wo PageRecycle eine RecyclerView (oder NestedScrollView) als Wurzelknoten. Dadurch wird sichergestellt, dass das Layout des Koordinators eine einzelne Scroll-Ansicht aufweist, die als Ziel verwendet werden kann.

+1

was ist die endgültige lösung dat du kommst, kannst du etwas licht werfen, ich bin mit ähnlichen fall stecken, –

+2

Vielen Dank. Du bist mein Retter. Diese Lösung sollte als die richtige Lösung markiert werden, es funktionierte für mich. Für diejenigen, die neugierig sind, müssen Sie das linearLayout nicht erstellen, wenn Sie dort nichts einfügen müssen. – Simon

+0

@blackcj das Rahmenlayout implementiert kein Layoutverhalten für das CoordinatorLayout, ich denke – fab

Verwandte Themen