ViewPager + Adaptador en Fragmento => laggy swiping
Tengo un ViewPager
con algunos fragmentos. Cada fragmento tiene un ListView
en un SlidingDrawer
(= invisible antes de swiping) con un ArrayAdapter
.
El adaptador se establece en onCreateView()
, que ralentiza el deslizamiento, porque 30 elementos de la lista tienen que cargar cada vez que deslizo, porque se están creando nuevos fragmentos.
- Cómo agregar un alias a Android (Java) Keystore
- Retrofit 2.0 cómo eliminar?
- Mejor manera de incluir el código de depuración?
- Cómo ordenar ArrayLists utilizando booleanos en java?
- Android java.lang.ClassNotFoundException
¿Mi pregunta es, si es posible fijar el adaptador después de golpear cuando ViewPager
está inactivo? ¿O hay un mejor camino? La Lista debe estar ya cargada cuando se ha expandido el SlidingDrawer.
- Torch / Flashlight app (android.hardware.camera está obsoleto)
- Cómo importar archivos Java a Eclipse
- Cómo convertir cursorLoader en Loader <Object>
- ¿Cómo manejar múltiples oyentes de interacción de fragmentos en una actividad correctamente?
- Creación de un detector Lint Java personalizado
- ¿No se puede pausar la actividad?
- ¿Cómo ver las fotos tomadas en Android sin utilizar la base de datos?
- Spinner subitem
¿Mi pregunta es, si es posible fijar el adaptador después de golpear cuando el paginador está inactivo?
Hay el OnPageChangeListener
que se puede establecer en el ViewPager
para supervisar los gestos de deslizamiento. A continuación, puede utilizar el onPageSelected()
(o el onPageScrollStateChanged()
para supervisar el estado actual) para recibir notificación cuando se ha seleccionado una nueva página y comenzar desde ese método la carga de datos.
Además, asegúrese de que el ListView
es responsable del retraso y no de alguna otra parte de su código.
Tuve un problema similar … Utilicé a los oyentes. Sin embargo, cuando deslizar dos páginas atrás a la parte de atrás era laggy … Hice algo como esto que mejoró la experiencia ….
viewpager.setOnPageChangeListener(new OnPageChangeListener() { int positionCurrent; boolean dontLoadList; @Override public void onPageScrollStateChanged(int state) { if(state == 0){ // the viewpager is idle as swipping ended new Handler().postDelayed(new Runnable() { public void run() { if(!dontLoadList){ //async thread code to execute loading the list... } } },200); } } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { positionCurrent = position; if( positionOffset == 0 && positionOffsetPixels == 0 ) // the offset is zero when the swiping ends{ dontLoadList = false; } else dontLoadList = true; // To avoid loading content for list after swiping the pager. } }
Si tardas unos milisegundos en cargar la lista que viene como suplemento al viewpager, está bien en términos de UX en lugar de dar una mala experiencia de swiping … Por lo tanto, la idea es esperar 400ms en el hilo antes de cargar el Lista y cerciorarse de que usted realmente no carga el contenido cuando el usuario está intentando deslizar rápidamente para ver el contenido del viewpager …
- Cómo aplicar la imagen personalizada del hilandero al diálogo de progreso en android
- Cómo construir apache cordova proyecto desde la línea de comandos?