android - 如何使用 ViewPager2 更改 TabLayout 选定的选项卡图标

标签 android

我使用 FragmentStateAdapterViewPager2com.google.android.material.tabs.TabLayout,并设置选项卡图标,我使用 com.google.android.material.tabs.TabLayoutMediator

TabLayoutMediator(
    mTabActivity.tabLayout,
    mTabActivity.viewPager,
    TabLayoutMediator.TabConfigurationStrategy { tab, position ->
        when (mTabEnums[position]) {
            TabType.TAB_CONTACT -> tab.setIcon(R.drawable.ic_tab_contact)
            TabType.TAB_GROUPS -> tab.setIcon(R.drawable.ic_tab_groups)
            TabType.TAB_MESSAGES -> tab.setIcon(R.drawable.ic_tab_message)
            TabType.TAB_MAPS -> tab.setIcon(R.drawable.ic_tab_map)
            TabType.TAB_RECENTS -> tab.setIcon(R.drawable.ic_tab_recent)
            TabType.TAB_INCALL_LIST -> tab.setIcon(R.drawable.ic_tab_contact)
            TabType.TAB_INCALL_MAPS -> tab.setIcon(R.drawable.ic_tab_map)
        }
    }
).attach() 

但是如何更改所选标签的图标?

我试过了,但是 mViewPagerViewPager2 而不是 ViewPager,代码无法编译。

mTabLayout.addOnTabSelectedListener(
      new TabLayout.ViewPagerOnTabSelectedListener(mViewPager) {

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

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

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

最佳答案

这个回调给了我所选标签的位置

mTabLayout.setOnTabSelectedListener(new   TabLayout.BaseOnTabSelectedListener() {
     @Override
     public void onTabSelected(TabLayout.Tab tab) {
        Log.d(TAG,"selection "+tab.getPosition());
     }

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

     }

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

     }
  });

或在 Kotlin 中

mTabActivity.tabLayout.addOnTabSelectedListener(object :
    TabLayout.OnTabSelectedListener {
    override fun onTabSelected(tab: TabLayout.Tab) {
        when (mTabEnums[tab.position])
        {
            TabType.TAB_CONTACT -> tab.icon =
                ContextCompat.getDrawable(mTabActivity,R.drawable.ic_tab_contact_green)
        }
    }

    override fun onTabUnselected(tab: TabLayout.Tab) {
        when (mTabEnums[tab.position])
        {
            TabType.TAB_CONTACT -> tab.icon =
                ContextCompat.getDrawable(mTabActivity,R.drawable.ic_tab_contact)
        }
    }

    override fun onTabReselected(tab: TabLayout.Tab) {

    }

})

关于android - 如何使用 ViewPager2 更改 TabLayout 选定的选项卡图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59401888/

相关文章:

android - 添加联系人组会导致 HTC 和 Samsung 设备出现 NullPointerException

android - android中的debug.keystore有什么用?

android - 比较Android中的两个声音

android - 编译器无法解析 io.ktor.client.features.logging 中的类

android - 确定 Android OpenGLES 中的最大/最小纹理大小限制

android - 互联网可用时如何处理自动消失对话框 fragment ?

android - 如何在不重复相同代码的情况下防止整个android应用程序中的屏幕截图

java - 如何在RecyclerView中展开和折叠卡片?

android - 如何在移动应用程序中实现推荐 friend ?

java - 如何在两个 Activity 之间显示不同的 json 数据?