studio recyclerview onrefresh hacer como android swiperefreshlayout

android - recyclerview - SwipeRefreshLayout en API 21



swiperefreshlayout kotlin (6)

En lugar de establecer directamente

getSwipeRefreshLayout().setRefreshing(true);

puede retrasarlo en el hilo de la interfaz de usuario para más adelante

getSwipeRefreshLayout().post(new Runnable() { @Override public void run() { getSwipeRefreshLayout().setRefreshing(true); } });

esto funciona perfectamente para que empiece a cargar en onCreateView y, si lo LoaderManager.LoaderCallbacks en un LoaderManager.LoaderCallbacks también.

No he visto que la barra de progreso se pegue accidentalmente (porque la carga de datos es demasiado rápida), pero si sospecha que la carga puede regresar demasiado pronto (¿error?) , Vale la pena hacer la misma publicación para

getSwipeRefreshLayout().setRefreshing(false);

de esta manera, las dos post s definitivamente vendrán una después de la otra, resultando en una vista de progreso definitivamente oculta.

Anteriormente estaba usando API 19 y estaba usando SwipeRefreshLayout para muchos de mis fragmentos. Cuando setRefreshing(true); contenido por primera vez anteriormente, estaba usando setRefreshing(true); y fue capaz de cargar contenido y funcionó bien.

Estoy notando en Android 5.0 Google está usando una vista de progreso circular. Cuando llamo a setRefreshing(true); ahora simplemente no tiene efecto. ¿Hay alguna forma de mostrar programáticamente el nuevo spinner? He profundizado en esto bastante pero no puedo mostrarlo programáticamente. He leído lo siguiente sobre esto:

http://developer.android.com/tools/support-library/index.html

https://yassirh.com/2014/05/how-to-use-swiperefreshlayout-the-right-way/

SwipeRefreshLayout no muestra ningún indicador de actualización

Básicamente, no muestra ninguna indicación de actualización en el primer intento.


Encontré el mismo problema, pero solo en el caso de usar StickyListHeadersListView . Usando android.widget.ListView , todo está bien.

Creo que en la api 21, Google ha reescrito la clase Listview。 Si está usando la subclass exends android.widget.ListView , creo que es posible que tenga que hacer que la subclass exends android.widget.ListView en la api 21.


Esta no es una solución muy limpia, pero funciona por ahora. setRefreshing(boolean) la vista de progreso está detrás de la barra de acción. La solución es empujarlo hacia abajo:

Display display = getActivity().getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int height = size.y; getSwipeRefreshLayout().setProgressViewOffset(false, -200, height / 9);

Si tiene una solución mejor, publíquela a continuación y la aceptaré.

Por favor, no use esta solución, la respuesta aceptada es mejor.



Lo que hay que recordar es que el diseño de material SwipeRefreshLayout ha cambiado, mientras que el anterior utilizó el BakedBezierInterpolator, pero el nuevo utiliza el selector de progreso "arrastrado a la posición"

Desafortunadamente, la API 21 ya no incluye el BakedBezierInterpolator, por lo que, desde mi punto de vista, tiene 2 opciones: 1) mover la ruedecilla hacia abajo (y recuerde volver a moverla luego) 2) haga su propia ruleta para sentarse en la pantalla cuando inicialmente estas cargando los datos

Si quieres mantener tu control de giro igual, entonces definitivamente usa SwipeRefreshLayout one, pero asegúrate de recordar volver a colocarlo.

Espero que esto ayude de alguna manera...


Puede intentar llamar al método de medición (int, int) antes de setRefreshing (true)

Echa un vistazo a https://.com/a/26692841/2114930 .