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); }}); 
  • La nueva versión de SwipeRefreshLayout causa un dibujo erróneo de vistas
  • SwipeRefreshLayout - Tirar desde el fondo
  • SwipeRefreshLayout con múltiples ListViews
  • No hay interrupción en SwipeRefreshLayout.java en el módulo android 5 onInterceptTouchEvent
  • SwipeRefreshLayout activar programaticamente
  • Scrollup no funciona en StickyListviewHeader con SwipeRefreshLayout
  • SwipeRefreshLayout con NestedScrollView y LinearLayout
  • Desplazar SwipeRefreshLayout con RecyclerView Actualizar en cualquier lugar de android 2.2
  • Cómo detener ScrollView desde el desplazamiento hasta la parte inferior de la página cargada actual en WebView
  • RecycleView se bloquea en Fragmento porque LayoutManager es NULL
  • Cómo utilizar PullToRefresh en StaggeredGridView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.