TabLayout 迁移到 AndroidX

TabLayout migration to AndroidX

我已使用重构->迁移到 AndroidX 将我的 Android 应用程序迁移到 AndroidX。 还修复了需要手动修复的问题。剩下的唯一问题是 TabLayout.

以前,在 AndroidX 迁移之前,我使用此代码:

    @Override
    public void setOnTabSelectedListener(OnTabSelectedListener onTabSelectedListener) {
        ......
        super.setOnTabSelectedListener(onTabSelectedListener);
    }

    @Override
    void selectTab(Tab tab) {
        ........
        super.selectTab(tab);
    }

但是使用 AndroidX,在构建时我遇到了这个错误: 方法不覆盖或实现超类型的方法

selectTab(com.google.android.material.tabs.TabLayout.Tab) 不是 public。无法从外部包访问..

我怎样才能正确地将它迁移到 AndroidX?

编辑: 忘了说我有自己的选项卡 class,我只是扩展了 TabLayout。我已经覆盖了 selectTab,因为我不想在调用父 selectTab() 之前对它做任何事情。在 AndroidX 中,selectTab 不再是 public,那么我怎样才能覆盖它先做一些事情呢?

AndroidX

之前的工作代码
@Override
void selectTab(Tab tab) {
   //if condition met, return;
  super.selectTab(tab);
}

首先初始化TabLayout:

private TabLayout tabLayout;

然后在onCreate中:

tabLayout = findViewById(R.id.your_tab_layout_id)

然后像这样添加监听器:

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            //
        }

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

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

        }
    });

您可以使用selectTab方法:

TabLayout tabLayout = findViewById(R.id.tab_layout);
tabLayout.selectTab(tabLayout.getTabAt(index));

关于监听器你可以使用addOnTabSelectedListener

tabLayout.addOnTabSelectedListener(OnTabSelectedListener);

如果您使用自定义 TabLayout 只需使用:

@Override
public void selectTab(@Nullable Tab tab) {
    //your code....
    super.selectTab(tab);
}