Mise à jour dynamique de TabLayout sans modification de l'onglet sélectionné

Je souhaite implémenter un assistant avec la bibliothèque de support de conception de matériaux .

J'utilise ViewPager et Tablayout mais j'ai du Tablayout ajouter de nouveaux onglets dynamiquement.

  • Existe-t-il un moyen simple d'ajouter une bordure au haut et en bas d'une vue Android?
  • La bibliothèque de support d'utilisation d'Android prend en charge SearchView
  • Un périphérique mobile est-il une télécommande pour une tablette?
  • Comment obtenir des fonctionnalités de périphérique Android à l'aide du gestionnaire de paquets
  • Écoutez les mises à jour et l'installation à partir du serveur
  • Intensité et dégâts des vibrations Android
  • D'abord, j'ai configuré mes widgets dans la méthode 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); 

    Ensuite, je veux ajouter une autre carte, lorsqu'un élément de la liste est cliqué:

     adapter.addFrag(new DummyFragment(), "3"); adapter.notifyDataSetChanged(); tabLayout.setTabsFromPagerAdapter(adapter); 

    Le problème est: après l'ajout, la carte sélectionnée a été réinitialisée en premier.

    Comment éviter ce comportement?

  • L'UI de configuration de Libgdx donne 2 erreurs inattendues dans le nouveau projet GWT
  • Conversion YUV en RGB par fragment shader
  • Comment puis-je restaurer mon projet sur une ancienne version dans Android Studio?
  • Qu'est-ce que Gradle dans Android Studio?
  • Comment utiliser la nouvelle fusion de manifeste (de Android Studio et Gradle)?
  • Le curseur a toujours une largeur par défaut
  • 2 Solutions collect form web for “Mise à jour dynamique de TabLayout sans modification de l'onglet sélectionné”

    Je viens de courir dans le même problème et, heureusement, j'ai trouvé une solution (pas très jolie, mais ça marche):

    Lorsque vous devez mettre à jour les onglets:

     pageradapter.notifyDataSetChanged(); for (int i = 0; i < viewpager.getCount(); i++) { sectionsTabLayout.getTabAt(i).setText(sectionsViewPagerAdapter.getPageTitle(i)); } 

    Il s'agit d'une légère modification du code @Kalpit. Vous devrez ajouter dynamiquement ce nouvel onglet à notre mise en page et attribuer le titre en appelant la même méthode à partir de la carte appelée par tablayout lorsque vous utilisez la méthode setupWithViewPager. J'ai donc utilisé cette instruction try catch pour les onglets qui n'ont pas encore été créés Mais vous pourriez essayer de leur attribuer un titre.

      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)); } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.