2015-06-24 1 views
8

ho il seguente codice nella mia attività:AppBarLayout, NestedScrollView, FrameLayout, qual è l'offerta?

<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> 

voglio aggiungere un frammento con un RecyclerView all'interno, nel layout telaio ("main_content" Layout id), ma in questo caso, questo non lavoro.

Qual è il problema? conosci qualche esempio?

+3

Dai un'occhiata a questa guida http://inthecheesefactory.com/blog/android-design-support-library-codelab/en e vedere se aiuta – EpicPandaForce

+2

"non funziona" significa nulla. –

+0

non dovresti avere una vista che ha la tua vista di scorrimento all'interno di un'altra vista che ha anche la tua vista di scorrimento, ma vedi se questa risposta ti aiuta [vista di scorrimento nidificata] (http://stackoverflow.com/questions/4490821/scrollview- inside-scrollview) – Jhonatas

risposta

11

La barra degli strumenti comprendente deve avere un singolo obiettivo di scorrimento. Quando si sostituisce il contenuto, è necessario sostituire il contenitore a scorrimento, non nidificandolo. Ad esempio:

<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> 

È quindi possibile chiamare:

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

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

Dove PageRecycle ha un RecyclerView (o NestedScrollView) come nodo radice. Ciò assicurerà che il layout del coordinatore abbia una singola vista a scorrimento da utilizzare come target.

+1

qual è la soluzione finale che si incontra, si può far luce, io sono bloccato con un caso simile, –

+2

Grazie. Tu sei il mio salvatore. Questa soluzione dovrebbe essere contrassegnata come la soluzione corretta, ha funzionato per me. Per coloro che sono curiosi, non è necessario creare il linearLayout all'interno se non è necessario mettere nulla lì. – Simon

+0

@blackcj il layout della cornice non implementa il comportamento del layout per CoordinatorLayout, penso – fab