it-roy-ru.com

Отключить вкладки в TabLayout

Я использовал TabLayout из последней библиотеки поддержки дизайна в моем приложении. Вкладки прикреплены к видеопейеру, который загружает фрагменты для каждой вкладки. Я хочу отключить все вкладки, пока просмотрщик не загрузит фрагмент для выбранной пользователем вкладки. Я не могу отключить вкладку или сделать ее недоступной для клика. Я использовал setEnabled(false) и setClickable(false), но он не работает. Я могу сделать его невидимым с помощью setVisiblity(View.GONE), но хочу, чтобы вкладки были видны всегда. 

    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 = "@ + идентификатор/tabLayout" Android: layout_width = "match_parent"
Android: layout_height = "0dp"
Android: layout_weight = "0,15"
Android: скроллбары = "горизонтальный"
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
Abhijith Surendran

есть 3 метода, реализованных слушателем щелчка вкладки, один из них - onTabSelected () устанавливает логическое условие, чтобы проверить, инициализирован ли ваш фрагмент . Затем, если это условие выполнено, разрешите транзакцию . Инициализируйте вкладки после кода фрагмента.

0
war_Hero

Еще один трюк:

Вы можете поместить еще один пустой прозрачный вид на табуляцию, пока ваше требование не будет выполнено. Когда вам нужно включить/показать вкладки, просто скрыть пустой вид.

3
viv

Если вы хотите отключить вкладку, вам просто нужно использовать customView

Прежде всего, создайте свой собственный макет (например, textView)

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" />

создать селектор, для изменения состояния включить/отключить (изменение цвета)

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>

затем надуйте его, установите имена и добавьте в 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)
}

и в конце, волшебная уловка! В этом примере кода я отключил все вкладки. Если вам нужно отключить вторую и третью вкладку, проверьте «индекс» в цикле и отключите, если вам нужно

 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