Cómo mantener el estado de ViewPager en un ListView?

Quiero implementar una lista de ViewPagers. Cada elemento de un ListView es ViewPager. Esto funciona hasta ahora. Mi problema es que no puedo mantener el estado de ViewPager. Por ejemplo: cuando cambio la página del primer ViewPager en la lista, desplácese hacia abajo hasta que el primer ViewPager ya no esté visible y luego desplácese de nuevo, el primer ViewPager mostrará su primera página de nuevo.

Escribí dos adaptadores, uno para ListView y otro para ViewPager. Estoy tratando de reciclar la vista desde el parámetro convertView del método getView en el ListAdapter. No estoy seguro si lo estoy haciendo bien y no tengo idea de cómo hacerlo en ViewPagerAdapter.

¿Algunas ideas?

Aquí está mi código hasta ahora:

GetView de MyListAdapter:

@Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRowView = inflater.inflate(R.layout.listitem, parent, false); }else{ mRowView=convertView; } switch(position){ case 0://Fussball ViewPagerAdapter fussballAdapter = new ViewPagerAdapter(mContext,"Fussball"); ViewPager fussballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); fussballPager.setAdapter(fussballAdapter); break; case 1://Handball ViewPagerAdapter handballAdapter = new ViewPagerAdapter(mContext,"Handball"); ViewPager handballPager = (ViewPager) mRowView.findViewById(R.id.viewpager1); handballPager.setAdapter(handballAdapter); break; //.../ default: //Do nothing } return mRowView; } 

InstantiateItem de ViewPagerAdapter:

 @Override public Object instantiateItem(View pager, int position) { inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); switch(position){ case 0: oneLayout=inflater.inflate(R.layout.table_layout, null); break; case 1: oneLayout=inflater.inflate(R.layout.table_layout_second, null); break; default: oneLayout=inflater.inflate(R.layout.table_layout, null); break; } ((ViewPager)pager).addView( oneLayout, 0 ); return oneLayout; } 

¡Gracias! 🙂

2 Solutions collect form web for “Cómo mantener el estado de ViewPager en un ListView?”

Puede agradecer a ListView Recycling como la causa de este problema. Ayuda a realizar el reciclador recupera sus artículos de la fila y lo reutiliza.

Una solución fácil que debe resolver su problema es usar etiqueta. Establezca la etiqueta antes de devolver rowView.

 view.setTag(currentPagerPosition); 

Entonces, si convertView! = Null usted sabe que debe haber establecido la posición para que pueda hacer

 int pastPagerPosition = (int) view.getTag(); 

Implementando setOnPageChangeListener y puede obtener la posición actual aquí onpageselected

  pager = (ViewPager) findViewById(R.id.pager); pager.setAdapter(new ImagePagerAdapter(imageUrls)); pager.setCurrentItem(position); pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub int i = 0; int newpos = arg0; } public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub int i = 0; int newpos = arg0; } public void onPageSelected(int arg0) { // TODO Auto-generated method stub int i = 0; position = arg0; //you can get Current position here } }); 

¡¡¡Espero que esto ayude!!!

  • Reemplazar fragmento en ViewPager muestra pantalla en blanco?
  • ViewPager of Fragment no muestra su contenido cuando el fragmento de raíz se reemplaza de nuevo
  • ¿Es posible desactivar el desplazamiento en un ViewPager?
  • Listview no actualizar en fragmento con las pestañas viewpager
  • Sincronizar todo el ListView en un ViewPager
  • GetActivity devolver nulo del fragmento
  • Los datos anteriores se muestran en ViewPager Android
  • ViewPager analógico para paginación a horizontales y verticales
  • Efecto de Cover Flow con ViewPager
  • Actualización dinámica de TabLayout sin cambiar la ficha seleccionada
  • Fragmentos de Android con pestañas y Viewpager
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.