SwipeRefreshLayout sin animación en la creación de fragmentos
Estoy utilizando android.support.v4.widget.SwipeRefreshLayout
con android.support.v7.widget.RecyclerView
.
En la creación de la vista de fragmentos necesito mostrar la animación SwipeRefreshLayout
. Pero cuando llamo setRefreshing(true)
no pasa nada. Pero cuando actualizo los cambios de animación de datos.
Supongo que la animación no se muestra sin el niño dentro de SwipeRefreshLayout
.
¿Cómo mostrar esta animación de la mejor manera?
- SwipeRefreshLayout + WebView cuando la posición de desplazamiento está en la parte superior
- Indicador de actualización de Android SwipeRefreshLayout no visible
- SwipeRefreshLayout se congela en la API 4.2.2
- SwipeRefreshLayout con scrollView y Disposición arriba
- Android SwipeRefreshLayout con TextView vacío no funciona correctamente
- SwipeRefreshLayout intercepta con ViewPager
- SwipeRefreshLayout de la lib de soporte. V21 no funciona con contenido estático
- SwipeRefreshLayout con NestedScrollView y LinearLayout
- Scroll up no funciona con SwipeRefreshLayout en Listview
- ¿Cómo deshabilitar la acción "pull to refresh" y usar sólo el indicador?
- La nueva versión de SwipeRefreshLayout causa un dibujo erróneo de vistas
- Cómo añadir una sugerencia de texto a Android SwipeRefreshLayout
- Desplazar SwipeRefreshLayout con RecyclerView Actualizar en cualquier lugar de android 2.2
Se trata de un error informado (se informa aquí ) y una solución está disponible:
mSwipeRefreshLayout.setProgressViewOffset(false, 0, (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, 24, getResources().getDisplayMetrics())); mSwipeRefreshLayout.setRefreshing(true);
Gracias chicos.
Sólo me he dado cuenta de que la solución más fácil es llamar method measure (int, int) con valores distintos de cero) antes de llamar a setRefreshing (true). El problema está sucediendo porque setRefreshing (true) está llamando antes de onMeasure.
Así que usted necesita llamar a:
swipeRefreshLayout.measure(initialWidth, initialHeight); swipeRefreshLayout.setRefreshing(true);
Depende del nivel de API en el que esté creando – si está usando hasta API 20, entonces puede activar setRefreshing (true), esto ejecutará la animación en ActionBar, pero en API 21 (Material Design) ellos Cambió el progreso para ser un spinner de lo que es "sacado a la vista" antes de que gire
Usted tiene 2 maneras de conseguir alrededor de esto en la API 21: 1) cambio de la ruleta hacia abajo con setProgressViewOffset (), pero recuerde cambiarlo de nuevo afterwords (nota que esto funciona en px, mientras que setDistanceToTriggerSync () utiliza dp) 2) hacer un Duplicado que se muestra cuando se están cargando los datos
La solución más eficiente en el código es utilizar el hilandero existente, pero hay que tener cuidado de que reinicie su posición
Si necesita calcular la densidad de píxeles, puede agarrarla desde:
DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); float scale = metrics.density;
SwipeRefreshLayout debe contener un niño para que funcione correctamente. Asegúrese de inicializarlo antes de usarlo en cualquier lugar!
Debe llamar a setRefreshing(true)
después de onDraw()
, de lo contrario no mostraría animación.
Así, en Actividad, puedes hacerlo en onCreate()
, como esto:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // other codes new Handler().post(new Runnable() { @Override public void run() { swipeRefreshLayout.setRefreshing(true); refreshing = true; refreshData(); } } }
En fragmento, puede poner estos códigos en onActivityCreated()
.
- Android Linkify enlaces textColor ignorado, estilo CSS anula posible?
- Cuadro de diálogo con EditText y Spinner