2017-02-13 6 views
0

私は4つのタブを持つタブレイアウトを持っています。タブを選択すると、そのタブのテキストとアイコンは赤色になり、他のタブはグレーで表示されます。Android tabLayout最後に選択したタブの色が正しく更新されない

アイコンを更新するには2つの異なるバージョンを作成し、それをオーバーライドしたOnTabSelectedListenerで更新しますが、これをtablayoutに追加すると、テキストの色が「遅れている」ようです。最後に選択したタブのテキストはまだ赤で、別の新しいタブを押すまで更新されません。

OnTabSelectedListenerを削除すると、色が正しく機能しますが、アイコンを更新できません.timLayout.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

これはQUICK FIXされ、

は、タブをループでそれを修正元の問題を解決し、すべてのクリックの上に灰色のアイコンを設定しません:

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

関連する問題