web-dev-qa-db-fra.com

Désactiver les onglets dans TabLayout

J'ai utilisé TabLayout de la dernière bibliothèque de support de conception de mon application. Les onglets sont attachés à un viewpager qui charge les fragments pour chaque onglet. Je veux désactiver tous les onglets jusqu'à ce que Viewpager charge le fragment pour l'onglet sélectionné par l'utilisateur. Je ne peux pas désactiver le tablayout ou le rendre non-cliquable. J'avais utilisé setEnabled(false) et setClickable(false) mais cela ne fonctionne pas. Je peux le rendre invisible en utilisant setVisiblity(View.GONE) mais je veux que les onglets soient visibles à tout moment.

    tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
    tabLayout.setTabMode(TabLayout.MODE_FIXED);
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.near_me_hover).setTag(1));
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.all_hostels).setTag(2));
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.top_five).setTag(3));
    tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.advanced_search).setTag(4));
    tabLayout.setEnabled(false);
    tabLayout.setClickable(false);

XML

Android.support.design.widget.TabLayout
Android: id = "@ + id/tabLayout" Android: layout_width = "match_parent"
Android: layout_height = "0dp"
Android: layout_weight = "0.15"
Android: barres de défilement = "horizontal"
Android: splitMotionEvents = "false">

        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            switch (tab.getPosition()) {
                case 0:
                    viewPager.setCurrentItem(tab.getPosition());
                    tab.setIcon(R.drawable.near_me_hover);
                    break;
                case 1:
                    viewPager.setCurrentItem(tab.getPosition());
                    tab.setIcon(R.drawable.all_hostels_hover);
                    break;
                case 2:
                    viewPager.setCurrentItem(tab.getPosition());
                    tab.setIcon(R.drawable.top_five_hover);
                    break;
                case 3:
                    viewPager.setCurrentItem(tab.getPosition());
                    tab.setIcon(R.drawable.advanced_search_hover);
                    break;
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            switch (tab.getPosition()) {
                case 0:
                    tab.setIcon(R.drawable.near_me);
                    break;
                case 1:
                    tab.setIcon(R.drawable.all_hostels);
                    break;
                case 2:
                    tab.setIcon(R.drawable.top_five);
                    break;
                case 3:
                    tab.setIcon(R.drawable.advanced_search);

                    break;
            }

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {
            tabLayout.getTabAt(position).select();
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
7

il y a 3 méthodes implémentées par l'écouteur cliquer sur l'onglet, l'une d'elles est onTabSelected (). Placez une condition booléenne pour vérifier si votre fragment est initialisé . Ensuite, si cette condition est remplie, autorisez la transaction. Initialisez également les onglets après votre code de fragment

0
war_Hero

Une autre astuce:

Vous pouvez créer une autre vue vierge et transparente sur Tablayout jusqu'à ce que votre demande soit remplie. Lorsque vous devez activer/afficher les onglets, masquez simplement la vue vierge.

3
viv

Si vous voulez désactiver l'onglet, il vous suffit d'utiliser un customView

Tout d'abord, créez votre mise en page personnalisée (textView par exemple)

v_tabview.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
  Android:id="@+id/tabItemView"
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:gravity="center"
  Android:maxLines="1"
  Android:textColor="@drawable/selector_tab" />

créer un sélecteur, pour changer d'état activer/désactiver (changer de couleur)

selector_tab.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
  <item Android:color="#9e9e9e" Android:state_enabled="false" /> //gray
  <item Android:color="#64b246" Android:state_enabled="true" /> //green
</selector>

puis gonflez-le, donnez des noms et ajoutez-le à tabLayout

arrayStringNames.forEach { name ->
    val textView: TextView = inflater.inflate(R.layout.v_tabview, tabLayout, false) as TextView
    textView.text = name
    val tab = tabLayout.newTab()
    tab.customView = textView
    tabLayout.addTab(tab)
}

et à la fin, un tour de magie! Dans cet exemple de code, je désactive tous les onglets. Si vous avez besoin de désactiver les deuxième et troisième onglets, cochez la case "index" dans un cycle et désactivez-la si nécessaire.

 for (index in 0 until tabLayout.tabCount) {
   ((tabLayout.getTabAt(index)?.customView) as? TextView)?.let { textView ->
     textView.isEnabled = enable //boolean
     (textView.parent as View).enable(enable)
  }
}
0
gbixahue