Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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'

  • IOException durante la lectura de InputStream
  • El menú desplegable de visualización web de Android no funciona en dispositivos Android 4.x
  • CircleCI Android constraintLayout no funciona
  • Android cómo arreglar la orientación de la cámara
  • Android - ¿Por qué mi aplicación utiliza alrededor de 40 MB de proceso de fondo en caché?
  • AccountManagerFuture.getResult () da como resultado la pantalla "No se puede iniciar sesión"
  • 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> 

  • Android: AutoCompleteTextView muestra sugerencias cuando no se introduce ningún texto
  • Cómo poner dos botones en la misma línea en Android
  • No se puede generar clave en el almacén de claves de Android
  • ListView o TableLayout?
  • La respuesta HTTPUrlConnection de Android devuelve la basura
  • Descargar archivo a directorio personalizado
  • 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); }}); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.