FragmentPagerAdapter actualización de título dinámicamente

Tengo un ViewPager con FragmentPagerAdapter, que tiene 3 Fragments. Ahora, tengo un número de artículos como parte del título del fragmento:

Introduzca aquí la descripción de la imagen

Así que el usuario puede añadir o eliminar esos elementos, y el título debe actualizar en consecuencia. Sin embargo, este título parece estático.

¿Cómo se puede recordar este método para actualizar los títulos de FragmentPagerAdapter?

@Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return items + " (" + notFoundItems + ")"; case 1: return found; case 2: return review; } return ""; } 

He encontrado un par de preguntas similares sobre SO, pero tengo que actualizar título , no sólo el fragmento en sí.

Finalmente, lo resolví simplemente restableciendo el buscapersonas.

 private OrdersTabsAdapter tabsAdapter; @InjectView(R.id.tabs_orders) SlidingTabLayout ordersTabs; @InjectView(R.id.pager) ViewPager pager; public void update() { tabsAdapter.updateFragments(productId, status); ordersTabs.setViewPager(pager); //this helped with the titles } 

Bueno. Así que puede tener un método en FragmentPagerAdapter que actualizará el recuento de notFoundItems , foundItems , itemsForReview . Después de actualizarlos, llame a notifyDataSetChanged() .

  @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return items + " (" + notFoundItems + ")"; case 1: return found + " (" + foundItems + ")"; case 2: return review + " (" + itemsForReview + ")"; } return ""; } 

Además, agregue esto a la implementación de la clase FragmentPagerAdapter . Por lo tanto, siempre que tenga un nuevo recuento de datos y desee actualizar el título, llame a este método.

  public void updateTitleData(int notFoundItems, int foundItems, int itemsForReview) { this.notFoundItems = notFoundItems; this.foundItems = foundItems; this.itemsForReview = itemsForReview; notifyDataSetChanged(); } 

No creo que restablecer ViewPager y notifyDataSetChange es una buena idea. Porque hará que la vista en ViewPager recree. Es innecesario.

Y encontré otra manera de resolver el problema.

  List<OrderListResult.TradeStatusVOsEntity> tradeStatusVOs = updateTitleEvent.getTradeStatusVOs(); for (int i = 0; i < tradeStatusVOs.size(); i++) { OrderListResult.TradeStatusVOsEntity tradeStatusVOsEntity = tradeStatusVOs.get(i); int num = tradeStatusVOsEntity.getNum(); String text = mAdapter.getPageTitle(i).toString(); if (num > 0) { text = text + "(" + num + ")"; } mButterTabs.getTabAt(i).setText(text); } mButterTabs.setTabTextColors(getResources().getColor(android.R.color.darker_gray), getResources().getColor(R.color.yellow)); 

En primer lugar, es necesario utilizar el método TabLayout de TabLayout para cambiar el modelo de ficha. A continuación, llame a setTabTextColors para actualizar la vista. Debido a que desde el código fuente de TabLayout, setTabTextColors actualizará todas las pestañas una por una.

Como uno de los comentarios debajo de él sugiere, la respuesta aceptada parece un poco excesiva para mí.

Basado en la respuesta de Frank , esto es lo que he hecho:

 public void myUpdatePageTitle(int pagePosition, int numItems) { TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); TabLayout.Tab tab = tabLayout.getTabAt(pagePosition); if (tab != null) { tab.setText(myCalcTabTitle(pagePosition, numItems)); } } private String myCalcTabTitle(int pagePosition, int numItems) { //TODO - For this page, return whatever title string you like, including the numItems value. (The best way to do this is using a string resource that accepts a decimal parameter.) } 

No tiene sentido volver a configurar el buscapersonas cada vez.
Ya tienes getPageTitle () sobreescrito y solo te falta la pista cuando cambias tus páginas y cuando es el momento de actualizar el título.
Así que usted puede hacer esto fácilmente:

 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { // your tite is: mAdapter.getPageTitle(position)); // TODO: update title } }); 

También tendrá que establecer el título inicial en onCreate ()

  • Cambiar de TabHost a Fragmentos con Viewpager: Donde poner todo mi código
  • CollapsingToolbarLayout con un ViewPager
  • Android ViewPager, cómo hacer que las vistas de los hermanos sean más pequeñas y más oscuras
  • Vista fija en el diseño de contenido de Viewpager, bajo CoordinatorLayout
  • No se puede cambiar la etiqueta del fragmento
  • OptionsMenu de Fragmentos anidados dentro de ViewPager
  • Android.content.res.Resources $ NotFoundException: No se puede encontrar el recurso ID # 0xffffffff
  • El selector de pestañas no funciona en la pestaña anterior haga clic al deslizarlo en viewpager
  • Deshabilitar y habilitar la paginación en ViewPager en Android
  • ¿Cómo puedo configurar ViewPager layoutParams de forma programática?
  • Android: ViewPagerIndicator - Creación de diferentes diseños para diferentes páginas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.