2017-08-30 2 views
0

J'essaie de changer la couleur des icônes d'onglets dans mon TabLayout, en fait je l'ai fait en utilisant addOnTabSelectedListener, mais cela ne fonctionne que lorsque je glisse entre les onglets. Donc, je veux que la couleur de l'icône du premier onglet soit la même que la couleur lorsque vous changez d'onglet.Comment puis-je appeler ViewPagerOnTabSelectedListener par programmation?

J'ai essayé avec viewPager.setCurrentItem(), mais cela ne fonctionne que lorsque l'index passé est différent de 0 (le premier onglet). Alors, comment appeler ViewPagerOnTabSelectedListener par programmation?

Ceci est mon code:

tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab){ 
      super.onTabReselected(tab); 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.prehipertension); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab){ 
      super.onTabUnselected(tab); 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.blancoTransparencia); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.blanco); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 
    }); 

    viewPager.setCurrentItem(0); 

C'est l'application lors de son exécution pour le temps poing. Lorsque vous balayez vers le deuxième onglet (et revenez au premier onglet), la couleur de l'icône change correctement.

tablayout icon enter image description here

Répondre

0

je ne sais pas que je pouvais comprendre correctement ou pas votre problème, mais j'ai travaillé avec vue sur le téléavertisseur et la poignée ses processus par cet algorithme. (vérifiez peut-être que vous avez trouvé ce que vous voulez).

1- Premièrement, vous identifiez vos onglets.

private void createTabIcons(){ 
    // i get custom tab view. 
    View profileTab = LayoutInflater.from(this) 
      .inflate(R.layout.custom_tab,null); 
    // set it's views such as its text and icon 
    ViewAppHolder.CustomTabViewHolder customTabProfileViewHolder = 
      new ViewAppHolder.CustomTabViewHolder(profileTab); 
    // set properties of icon ... note this is my main tab so i set 'color.active' 
    customTabProfileViewHolder.TAB_IMAGE_VIEW 
      .setImageDrawable(getDrawable(R.drawable.ic_person_black_24dp)); 
    customTabProfileViewHolder.TAB_IMAGE_VIEW 
      .setColorFilter(ContextCompat.getColor(this,R.color.active_tab)); 

    tabLayout.getTabAt(Constants.USER_PROFILE_TAB).setCustomView(profileTab); 
    // it's the next tab by the same previous steps 
    View friendsTab = LayoutInflater.from(this) 
      .inflate(R.layout.custom_tab,null); 

    ViewAppHolder.CustomTabViewHolder customTabFriendsViewHolder = 
      new ViewAppHolder.CustomTabViewHolder(friendsTab); 
    // the diff is here .. i set the color of icon 'color.non_active' 
    customTabFriendsViewHolder.TAB_IMAGE_VIEW 
      .setImageDrawable(getDrawable(R.drawable.ic_group_black_24dp)); 
    customTabFriendsViewHolder.TAB_IMAGE_VIEW 
      .setColorFilter(ContextCompat.getColor(this,R.color.non_active_tab)); 

/// .... and remain tabs also have the same thing with color non_active. 

2- puis dans les deux onTabSelected et onTabUnselected j'appelle juste méthode appelée setCurrentTab() et implémentons est que

private void setCurrentTab() { 
    if (tabLayout != null) { 
     int currentPosition = tabLayout.getSelectedTabPosition(); 
     int unSelectedTabs = currentPosition; 

     do { 
      unSelectedTabs = (unSelectedTabs + 1) % 4; 

      Log.e("un selected ", String.valueOf(unSelectedTabs)); 
      Log.e("un selected ", String.valueOf(currentPosition)); 

      ViewAppHolder.CustomTabViewHolder customTabViewHolder = 
        new ViewAppHolder.CustomTabViewHolder(
          tabLayout.getTabAt(unSelectedTabs).getCustomView() 
        ); 


      if (unSelectedTabs != currentPosition) { 
       customTabViewHolder.TAB_IMAGE_VIEW 
         .setColorFilter(ContextCompat.getColor(this, R.color.non_active_tab)); 
      } else { 
       customTabViewHolder.TAB_IMAGE_VIEW 
         .setColorFilter(ContextCompat.getColor(this, R.color.active_tab)); 
      } 

     } while (unSelectedTabs != currentPosition); 
    } 
}