2015-06-14 10 views
23

ho iniziato ad usare il nuovo CoordinatorLayout e mi sono imbattuto in questo problema:Scorrendo trigger aggiornare invece di rivelare la barra degli strumenti

demo

Come si può vedere quando si tenta di scorrere verso il basso quando la barra è parzialmente visibile e il recylcerview è nella posizione più alta che attiva l'evento di aggiornamento invece di tirare giù la barra degli strumenti. L'utente deve scorrere verso l'alto che verso il basso per rivelarlo.

layout XML simile a questa: activity_main.xml:

<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <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:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

      <android.support.v7.widget.Toolbar 
       android:id="@+id/toolbar" 
       style="@style/customActionBar" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="?attr/colorPrimary" 
       android:minHeight="?attr/actionBarSize" 
       app:layout_scrollFlags="scroll|enterAlways"/> 

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

     <FrameLayout 
      android:id="@+id/container" 
      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/navigation_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:background="@android:color/white" 
     app:headerLayout="@layout/navigation_drawer_header" 
     app:menu="@menu/navigation_items" /> 

</android.support.v4.widget.DrawerLayout> 

fragment_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/swipe_refresh" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <android.support.v7.widget.RecyclerView 
      android:id="@+id/recycler_view" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:clipToPadding="false" 
      android:padding="8dp" 
      android:scrollbars="none" /> 

    </android.support.v4.widget.SwipeRefreshLayout> 

</FrameLayout> 

Ther SwipeRefreshLayout è in una FrameLayout becuase ci sono più elementi nel frammento della mia app.

Qualsiasi aiuto sarebbe apprezzato.

+0

Possibile duplicato di [Android: CollapsingToolbarLayout e SwipeRefreshLayout rimanere bloccati] (http://stackoverflow.com/questions/30779667/android -collapsingtoolbarlayout-and-swiperefreshlayout-get-stuck) –

+1

[Questo è stato corretto in Support Library v23.1.1 senza soluzioni alternative] (http://stackoverflow.com/a/33776549/383414) –

+0

@RichardLeMesurier I do not penso sia risolto interamente. Sto affrontando la stessa roba usando la versione 23.3. – zgulser

risposta

9

UPDATE: Questo problema è stato risolto nella Libreria di supporto v23.1.1.

Sembra che sia necessario abilitare/disabilitare lo SwipeRefreshLayout quando lo scostamento AppBarLayout cambia, utilizzando AppBarLayout.OnOffsetChangedListener.

Vedi https://stackoverflow.com/a/30822119/795820

+0

si prega di rispondere anche a questo: http://stackoverflow.com/questions/36434071/android-support-v4-widget-swiperefreshlayout-working-but-it-is-not-visible –

+1

Torna in 23.2.1 – k0sh

+0

Anche per caso nested RecyclerView, controlla qui http://stackoverflow.com/a/36895607/1221256 – user1221256

9

forse troppo tardi, ma potrebbe aiutare tutti i nuovi arrivati, mi si avvicinò con una soluzione facile per questo. con la creazione personalizzata class che si estende SwipeRefreshLayout si può usare ovunque dove esiste AppBaLayout seguire codice qui sotto

public class MySwipeLayout extends SwipeRefreshLayout implements AppBarLayout.OnOffsetChangedListener { 
     private AppBarLayout appBarLayout; 

     public MySwipeLayout(Context context) { 
      super(context); 
     } 

     public MySwipeLayout(Context context, AttributeSet attrs) { 
      super(context, attrs); 
     } 

     @Override 
     protected void onAttachedToWindow() { 
      super.onAttachedToWindow(); 
      if (getContext() instanceof Activity) { 
       appBarLayout = (AppBarLayout) ((Activity) getContext()).findViewById(R.id.appbar); 
       appBarLayout.addOnOffsetChangedListener(this); 
      } 
     } 

     @Override 
     protected void onDetachedFromWindow() { 
      if(appBarLayout!=null){ 
      appBarLayout.removeOnOffsetChangedListener(this); 
      appBarLayout = null; 
      } 
      super.onDetachedFromWindow(); 
     } 

     @Override 
     public void onOffsetChanged(AppBarLayout appBarLayout, int i) { 
      this.setEnabled(i == 0); 
     } 
    } 
+0

Bello e pulito. Grazie. –

+0

@ k0sh per favore rispondi anche a questo: http://stackoverflow.com/questions/36434071/android-support-v4-widget-swiperefreshlayout-working-but-it-is-not-visible –

+0

Questo risolveva il mio problema –

Problemi correlati