TabLayout迁移至AndroidX

问题描述 投票:0回答:2

我已经用refactor->migrate to AndroidX.把我的Android App迁移到了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) 是不公开的。不能从外部包中访问...

如何正确的将其迁移到AndroidX上?

编辑:忘记说了,我有自己的Tab类,我只是扩展了这个 TabLayout. 我已经覆盖了 selectTab 因为我想在调用父类之前对它做一些事情。selectTab(). 在AndroidX中, selectTab 是不公开的了,那我怎么能先覆盖它来做一些事情呢?

AndroidX之前的工作代码

@Override
void selectTab(Tab tab) {
   //if condition met, return;
  super.selectTab(tab);
}
java android mobile androidx android-tablayout
2个回答
1
投票

你可以使用 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);
}

1
投票

首先初始化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) {

        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.