it-swarm.com.ru

TabLayout selected Значок Tab не выбирается при запуске

Я использую 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) не использует значок выбранного состояния. Вместо этого он использует невыбранное состояние.

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

 enter image description here

когда вместо этого должно быть так:

 enter image description here

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

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

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

10
Emil Adz

Правильный ответ для выбора вкладки в 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() заставит все элементы в пользовательском представлении установить их выбранные состояния из селекторов.

3
Emil Adz

Попробуй это:

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

10
emirua

В моей вкладке я использовал селектор 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]);
    }
}

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

3
jackcar

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

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

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

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