我正在使用Android设计库中的TabLayout。我有多个选项卡,每个选项卡在选中时都有一个操作。所以我有一个属性startSelection,它执行
tabLayout.getTabAt(startSelection).select();
这将选择选项卡并执行此选项卡的操作。它适用于除第一个选项卡之外的每个选项卡,它在启动时自动选择而不执行(!)操作。有人有解决方案吗?
我不想使用onTabReselected方法,因为这会导致TabLayout的另一种行为。同时选择第二个选项卡并选择第一个选项卡也不是一个好方法。
祝你好运
答案 0 :(得分:3)
我正在实现的自定义选项卡布局也遇到类似的问题,启动活动时,第一个选项卡不会以选定状态显示,但是启动时自动选择选项卡2,3,4 ...会出现。
对我有帮助的解决方案是在 @Override
protected void onResume() {
super.onResume();
mTabLayout.getTabAt(1).select();
mTabLayout.getTabAt(0).select();
}
中,迅速选择第二个标签,然后返回到第一个标签。
{{1}}
答案 1 :(得分:2)
我明白了。解决方案很简单,使用(一次)onTabReselected并覆盖那里的监听器。
tabLayout.setOnTabSelectedListener(new OnTabSelectedListener() {
@Override
public void onTabSelected(Tab tab) {
selectTab(tab);
}
private void selectTab(Tab tab) {
// do something
}
@Override
public void onTabReselected(Tab tab) {
if (tab.getPosition() == 0) {
selectTab(tab);
tabLayout.setOnTabSelectedListener(new OnTabSelectedListener() {
@Override
public void onTabSelected(Tab tab) {
selectTab(tab);
}
@Override
public void onTabReselected(Tab arg0) {
}
@Override
public void onTabUnselected(Tab arg0) {
}
});
}
}
@Override
public void onTabUnselected(Tab tab) {
}
});
答案 2 :(得分:0)
当您尝试在语法上选择第一个选项卡时,您的视图初始化未完成。使用句柄并等到100ms
然后尝试选择标签。
在onCreate()
new Handler().postDelayed(
new Runnable(){
@Override
public void run() {
tabLayout.getTabAt(startSelection).select();
}
}, 100);
答案 3 :(得分:0)
我有更简单的解决方案
tabLayout.addOnTabSelectedListener(object: TabLayout.OnTabSelectedListener {
private var alreadyReselected = AtomicBoolean(false)
override fun onTabReselected(tab: TabLayout.Tab) {
if (tab.position == 0 && !alreadyReselected.getAndSet(true)) onTabSelected(tab)
}
override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabSelected(tab: TabLayout.Tab) {
//do whatever you want on first selection
}
})
答案 4 :(得分:0)
使用添加自定义标签也可以实现这一点
带有 2 个参数的 TabLayout 的 addTab()
方法,例如
//第一个参数标签 //第二个参数 setSelected
tabLayout.addTab(tab, true/false)
//例子
for (item in tabsList) {
var tab = tabLayout.newTab()
tab.text = item.name
if (conditions for selections) {
tabLayout.addTab(tab, true)
} else {
tabLayout.addTab(tab, false)
}
}