SwipeRefreshLayout cargador no sube cuando tire hacia abajo de Android

He utilizado SwipeRefreshLayout con recyclerview, Su funcionamiento muy bien en toda la versión de Android, pero en Kitkat cuando tire hacia abajo entonces SwipeRefreshLayout cargador no va a subir y también no actualizar datos de recyclerview pero trabajando en piruletas

Estoy usando 'com.android.support:support-v4:22.2.1'

Editar 1

SwipeRefreshLayout swipe_refresh; swipe_refresh = (SwipeRefreshLayout)rootView.findViewById(R.id.swipe_refresh); swipe_refresh.post(new Runnable() { @Override public void run() { swipe_refresh.setRefreshing(true); } }); swipe_refresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { // Loading more data.. ..... .... getData(); } }); swipe_refresh.setColorSchemeResources(android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); public void getData(){ // Load data from web service... ... ... ... // After loading swipe_refresh.setRefreshing(false); // Set data to adapter } 

Código de diseño

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_refresh" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:background="@color/grey_100"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.RecyclerView android:id="@+id/gv_feeds" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" android:scrollbars="vertical"/> <ProgressBar android:id="@+id/prog_load_more" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_horizontal" android:visibility="gone"/> </LinearLayout> </FrameLayout> </android.support.v4.widget.SwipeRefreshLayout> 

3 Solutions collect form web for “SwipeRefreshLayout cargador no sube cuando tire hacia abajo de Android”

He tenido el mismo problema antes. Parece suceder cuando usted no tiene su RecyclerView como un niño directo de su SwipeRefreshLayout.

Solucionamos este problema utilizando un SwipeRefreshLayout personalizado como éste:

 public class FixedSwipeRefreshLayout extends SwipeRefreshLayout { private RecyclerView recyclerView; public FixedSwipeRefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); } public FixedSwipeRefreshLayout(Context context) { super(context); } public void setRecyclerView(RecyclerView recyclerView) { this.recyclerView = recyclerView; } @Override public boolean canChildScrollUp() { if (recyclerView!=null) { return recyclerView.canScrollVertically(-1); } return false; } } 

Entonces, en lugar de usar android.support.v4.widget.SwipeRefreshLayout use su propio 'com.example.app.FixedSwipeRefreshLayout' como este:

 <?xml version="1.0" encoding="utf-8"?> <com.example.app.FixedSwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_refresh" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> ... </com.example.app.FixedSwipeRefreshLayout> 

Y finalmente, cuando usted consigue una manija de su SwipeRefreshLayout, utilice su personalizado y fije su RecyclerView:

 FixedSwipeRefreshLayout swipe_refresh; swipe_refresh = (FixedSwipeRefreshLayout) rootView.findViewById(R.id.swipe_refresh); RecyclerView mRecyclerView = (RecyclerView) rootView.findViewById(R.id.gv_feeds); swipe_refresh.setRecyclerView(mRecyclerView); 

Espero que esto ayude.

Según swipeRefreshDocumentation SwipeRefreshLayout no juega bien con la disposición que no es desplazable si se agrega dentro de él: usted tiene 2 solución para esto:

1) cambiar el diseño para hacer swipeRefreshLayout tener hijo directo como recyclerView.

algo como esto:

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:id="@+id/ll_HeaderProgress" android:background="@color/white_color_30"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipe_refresh" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="9" > <android.support.v7.widget.RecyclerView android:id="@+id/recyclerview_buzz" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical"/> </android.support.v4.widget.SwipeRefreshLayout> <ProgressBar android:id="@+id/ll_footerProgress" android:layout_width="40dp" android:layout_height="40dp" android:layout_gravity="center_horizontal" android:visibility="gone"/> </LinearLayout> </FrameLayout> 

2) Extienda SwipeRefreshLayout con listener para poder agregar varias condiciones de las clases que muestran este diseño.

Algo como lo siguiente: RefreshSwipeRefreshLayout.java

 public class RefreshSwipeRefreshLayout extends SwipeRefreshLayout { private OnChildScrollUpListener mScrollListenerNeeded; public interface OnChildScrollUpListener { boolean canChildScrollUp(); } public RefreshSwipeRefreshLayout(Context context) { super(context); } public RefreshSwipeRefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); } /** * Listener that controls if scrolling up is allowed to child views or not */ public void setOnChildScrollUpListener(OnChildScrollUpListener listener) { mScrollListenerNeeded = listener; } @Override public boolean canChildScrollUp() { if (mScrollListenerNeeded == null) { Log.e(GeneralSwipeRefreshLayout.class.getSimpleName(), "listener is not defined!"); } return mScrollListenerNeeded != null && mScrollListenerNeeded.canChildScrollUp(); } } 

Y luego hacer esto en la clase que muestra SwipeRefreshLayout conteniendo recyclerView layout, puede hacer algo como esto:

 mSwipeLayout.setOnChildScrollUpListener(new OnChildScrollUpListener() { @Override public boolean canChildScrollUp() { return ((LinearLayoutManager)mRecyclerView.getLayoutManager()).findFirstVisibleItemPosition().getFirstVisiblePosition() > 0 || mRecyclerView.getChildAt(0) == null || mRecyclerView.getChildAt(0).getTop() < 0; } 

});

También no olvide cambiarlo en xml

Usted intenta de esta manera

  listView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { boolean enable = false; if(listView != null && listView.getChildCount() > 0){ // check if the first item of the list is visible boolean firstItemVisible = listView.getFirstVisiblePosition() == 0; // check if the top of the first item is visible boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0; // enabling or disabling the refresh layout enable = firstItemVisible && topOfFirstItemVisible; } swipeRefreshLayout.setEnabled(enable); }}); 
  • AppBarLayout + TabLayout + CollapsingToolbarLayout + SwipeToRefresh
  • SwipeRefreshLayout en API 21
  • Recycler view Array index otof bound Incossitency Error mientras SwipetoRefresh y reciclador desplazándose al mismo tiempo
  • establecer la ubicación de la barra de progreso en la función Actualizar actualización de Android
  • ¿Cómo solicitar datos de la base de datos de firebase de nuevo?
  • SwipeRefreshLayout dentro de ViewPager
  • Cómo detener ScrollView desde el desplazamiento hasta la parte inferior de la página cargada actual en WebView
  • SwipeRefreshLayout con scrollView y Disposición arriba
  • RecyclerView y SwipeRefreshLayout
  • SwipeRefreshLayout activar programaticamente
  • ¿Cómo deshabilitar la acción "pull to refresh" y usar sólo el indicador?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.