Actualización dinámica de TabLayout sin cambiar la ficha seleccionada
Quiero implementar un asistente con la biblioteca de soporte de diseño de materiales .
Estoy utilizando ViewPager
y Tablayout
pero tengo un problema al agregar nuevas pestañas dinámicamente.
- NullPointerException en FrameLayout.onMeasure ()
- No se puede cambiar ID de contenedor de fragmento
- GetActivity devolver nulo del fragmento
- ¿Cómo pasar argumentos de fragmentos mientras se utiliza un paginador de vista con diferentes fragmentos / layouts?
- Controla las direcciones en las que se puede desplazar el ViewPager de forma dinámica con la información de la interfaz de usuario
Primero, configuré mis widgets en el método onCreate
:
viewPager = (ViewPager) findViewById(R.id.tab_viewpager); tabLayout = (TabLayout) findViewById(R.id.tab_layout); adapter = new ViewPagerAdapter(getSupportFragmentManager()); adapter.addFrag(new DummyFragment(), "1"); adapter.addFrag(new DummyFragment(), "2"); viewPager.setAdapter(adapter); tabLayout.setupWithViewPager(viewPager);
Entonces quiero agregar otra tarjeta, cuando se hace clic en un elemento de la lista:
adapter.addFrag(new DummyFragment(), "3"); adapter.notifyDataSetChanged(); tabLayout.setTabsFromPagerAdapter(adapter);
El problema es: después de agregar, la tarjeta seleccionada se restablece a la primera.
¿Cómo evitar este comportamiento?
- Listview no actualizar en fragmento con las pestañas viewpager
- Viewpager no se desplaza en el diseño del coordinador
- TabWidget envuelto en HorizontalScrollView no se desplaza con ViewPager
- Fragmentos dentro de ViewPager desaparecen cuando cambia la orientación
- Despliegue de la disposición de la barra de herramientas con Viewpager dentro de NestedScrollView
- Cambiar el fragmento frontal al hacer clic en un elemento de un SlidingMenu
- Fragmentos de Viewpager no se muestran después de la primera vez
- Custom ViewPager para permitir que el control GoogleMap infantil se desplace horizontalmente
Acaba de correr en el mismo problema, y por suerte encontró una solución (no es una bonita, pero funciona):
Cuando necesite actualizar las pestañas:
pageradapter.notifyDataSetChanged(); for (int i = 0; i < viewpager.getCount(); i++) { sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); }
Esta es una pequeña modificación en el código @Kalpit. Tendrá que añadir dinámicamente esta nueva pestaña a nuestro diseño y asignar el título llamando al mismo método del adaptador que se llama por tablayout cuando se utiliza el método setupWithViewPager. Por lo tanto, he utilizado esta declaración try try para pestañas que aún no se han creado todavía Pero puede intentar asignarles algún título.
adapter.notifyDataSetChanged(); for(int i = 0;i<adapter.getCount();i++){ try{ tablayout.getTabAt(i).setText(adapter.getPageTitle(i)); } catch(IndexOutOfBoundException e){ tablayout.addTab(tablayout.newTab().setText(adapter.getPageTitle(i)); } }
- Identifying refunded Play Store descargas
- ¿Cómo contraer el AppBarLayout animado sin empujar el contenido, similar a WhatsApp Android?