【问题标题】:Select a Tab without invoking OnTabSelectedListener选择一个选项卡而不调用 OnTabSelectedListener
【发布时间】:2019-01-12 03:59:06
【问题描述】:
我正在尝试在我的 Activity 中使用 TabLayout。每个选项卡将用户带到一个片段。
- 假设用户在 Tab1 上,它有 fragment1。
- 他点击了有fragment2的Tab2。
- 现在,当用户在 Tab2 上并按下返回按钮时,我希望用户返回 Tab1 上的 Fragment1。我通过
getFragmentManager().popBackStack() 来做到这一点。现在我还想将选定的选项卡更新为 Tab1。
有什么方法可以在不调用 TabSelectedListener 的情况下在 TabLayout 中将选项卡标记为选中?
【问题讨论】:
标签:
android
android-tablayout
【解决方案1】:
这样做:
TabLayout.Tab tab = tabLayout.getTabAt(index);
tabLayout.removeOnTabSelectedListener(this);
tab.select();
tabLayout.addOnTabSelectedListener(this);
享受:)
【解决方案2】:
您在onTabSelected 中运行的任何代码都可以移动到自定义方法中,并且您可以在活动中保持活动选项卡状态。
- 为当前活动的标签位置添加一个字段
- 创建一个
onTabSelected(int position, boolean update) 方法。将 false 作为第二个参数传递会绕过您希望在以编程方式选择选项卡时避免运行的任何逻辑。
- 在调用
tab.select() 更新TabLayout 之前,调用onTabSelected(position, false) 更新您在第一步中创建的活动选项卡字段,但不运行选项卡选择逻辑。然后当你的TabSelectedListener 触发时,它会短路,因为activeTabPosition 字段已经设置为更新的位置。
这是新方法的框架。
private void onTabSelected(int position, boolean update) {
if (position == activeTabPosition) {
return;
}
activeTabPosition = position;
if (update) {
// Your tab selected logic
}
}