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) {
}
});
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
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.
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)
}
}