2017-02-13 5 views
0

У меня есть вкладка с 4 вкладками. Когда я выбираю вкладку, текст и значок этой вкладки должны быть красными, а остальные вкладки должны быть серыми.Android tabLayout последний выбранный цвет вкладки не обновляется правильно

Для обновления значка я создал две разные версии и обновил его в своем переопределенном OnTabSelectedListener, но когда я добавляю это в tablayout, цвет текста кажется «отстающим». Последний выбранный текст закладки остается красным и не обновляется, пока я не нажму на другую новую вкладку.

Когда я удаляю OnTabSelectedListener, цвета работают правильно, но затем я не могу обновить значок ... Я не смог обновить цвет текста непосредственно на элементе tabLayout.tab.

Это ошибка в Android или я что-то упускаю?


activity_tab.xml:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/main_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:context="com.example.oivind.tabsexample.TabActivity"> 

<android.support.design.widget.AppBarLayout 
    android:id="@+id/appbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom"> 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 
     android:background="@android:color/darker_gray"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabIndicatorHeight="0dp" 
     app:tabTextColor="@android:color/darker_gray" 
     app:tabSelectedTextColor="@android:color/holo_red_light" 
     android:background="@android:color/white" 
     style="@style/NASTabLayout"> 

    </android.support.design.widget.TabLayout> 
</android.support.design.widget.AppBarLayout> 

<android.support.v4.view.ViewPager 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

tabActivity.java OnCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tab); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    viewPager = (ViewPager) findViewById(R.id.container); 
    viewPager.setAdapter(mSectionsPagerAdapter); 

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 

    tabLayout.getTabAt(0).setIcon(R.drawable.ic_icon_error); 
    for(int i = 1; i < tabLayout.getTabCount(); i++) { 
     tabLayout.getTabAt(i).setIcon(R.drawable.ic_icon_error_grey); 
    } 

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      tab.setIcon(R.drawable.ic_icon_error); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 
      tab.setIcon(R.drawable.ic_icon_error_grey); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      tab.setIcon(R.drawable.ic_icon_error_grey); 
     } 
    }); 
} 

screenshot of the bug

+0

Это происходит только тогда, когда я устанавливаю его обратно на серый значок в «OnTabUnselected». На самом деле кажется ошибкой в ​​Android. – Otziii

ответ

-1

ЭТО БЫСТРО FIX И НЕ РЕШИТЬ исходной задачи

Fixed его перекручивание через вкладки и установите серый значок на каждый клик:

tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       for(int i = 0; i < tabLayout.getTabCount(); i++) { 
        tabLayout.getTabAt(i).setIcon(R.drawable.ic_icon_error_grey); 
       } 
       tab.setIcon(R.drawable.ic_icon_error); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 

Если кто-то знает, как это сделать это правильно, пожалуйста, сообщите. :)

+0

Я не знаю, почему это проголосовало. Ясно, что это не правильное решение, но оно устраняет проблему. – Otziii