我已经用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);
}
你可以使用 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);
}
首先初始化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) {
}
});