Выбранный TabLayout Значок закладки не выбран при запуске:

Я использую TabLayout для навигации с вкладками в своем приложении. У меня есть очень странная проблема, я создал 4 вкладки, используя этот код:

private int[] tabIcons = {R.drawable.navigation_timeline_icon_selector, R.drawable.navigation_feed_icon_selector,
        R.drawable.navigation_messages_icon_selector, R.drawable.navigation_notification_icon_selector};

 TabLayout tabLayout = setTabLayout();
    if (tabLayout != null) {
        for (int i = 0; i < 4; i++) {
            tabLayout.getTabAt(i).setIcon(tabIcons[i]);
        }
    }

каждый из элементов в tabIcon является selector с выбранными и невыбранными состояниями. Все переключатели значков настроены следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_selected="true"/>
      <item android:drawable="@drawable/navigation_timeline_selected_icon" android:state_pressed="true"/>
      <item android:drawable="@drawable/navigation_timeline_icon" />
</selector>

Проблема заключается в том, что при запуске приложения первая выбранная вкладка (индекс 0) не использует значок выбранного состояния. Вместо этого он использует не выбранное состояние.

Чтобы пояснить ниже, это скриншот проблемы, при первом запуске моя вкладка выглядит следующим образом:

введите описание изображения здесь

когда это должно быть примерно так:

введите описание изображения здесь

После того, как я изменил страницу, все значки вернутся к полной функциональности, и выбранные состояния будут правильно выбраны.

Я попытался использовать метод TabLayout.Tab select(), но результат тот же, что иконка, которая используется, - это не выбранный значок.

Кто-нибудь знает, что я могу сделать, чтобы исправить это?

Спасибо заранее.

Ответ 1

Правильный ответ для выбора вкладок в TabLayout будет:

TabLayout.Tab currentTab = mTabs.getTabAt(selectedTab);
if (currentTab != null) {
    View customView = currentTab.getCustomView();
    if (customView != null) {
        customView.setSelected(true);
    }
    currentTab.select();
}

где currentTab.select() переместит индикатор на выбранную вкладку, когда customView.setSelected() сделает все элементы в настраиваемом представлении, чтобы их выбранные состояния от выбора селекторов были выбраны.

Ответ 2

Попробуйте следующее:

tabLayout.getTabAt(yourInitialPosition).getCustomView().setSelected(true);

Ответ 3

Я использовал в своем tabLayout селектор xml для значков со следующими состояниями:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/icon_ajuda_off"/>
<item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/icon_ajuda_on"/>
<item android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/icon_ajuda_on"/>
<item android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/icon_ajuda_on"/>

и в коде:

private int[] tabIcons = {R.drawable.ic_tab_sites, R.drawable.ic_tab_help,
        R.drawable.ic_tab_profile, R.drawable.ic_tab_notification, R.drawable.ic_tab_search};

if (tabLayout != null) {
    for (int i = 0; i < 5; i++) {
        tabLayout.getTabAt(i).setIcon(tabIcons[i]);
    }
}

Это может помочь.

Ответ 4

Попробуйте выбрать вкладку после ее заполнения.

TabLayout tabLayout = setTabLayout();
if (tabLayout != null) {
    for (int i = 0; i < 4; i++) {
        tabLayout.getTabAt(i).setIcon(tabIcons[i]);
    }
    tabLayout.getTabAt(0).select();
}

Ответ 5

здесь есть решение, вставьте этот код в onCreate, потому что, используя вкладки 0, индекс не запускает напрямую, это простой способ сделать

 viewPager.setCurrentItem(1);
    if (viewPager.getCurrentItem()==1)
    {
        viewPager.setCurrentItem(0);
    }