如何在打开Activity时无需点击TabLayout即可自动显示对应Fragment
问题根因
你当前代码的执行顺序逻辑错误,导致默认不会触发Fragment加载:
- 你提前调用了
tabLayout.selectTab(tabLayout.getTabAt(0)),此时还没有往TabLayout中添加任何Tab,getTabAt(0)返回null,选中操作完全无效 - 后续添加完Tab、设置完Tab选择监听器后,没有再执行选中操作,自然不会触发
onTabSelected回调中的Fragment加载逻辑
修复方案
仅需要调整onCreate方法中Tab相关逻辑的执行顺序即可:
- 先完成所有Tab的创建和添加操作
- 再给TabLayout设置Tab选择监听器
- 最后执行选中第一个Tab的操作,此时监听器已经生效,选中操作会自动触发Fragment加载
修改后的对应代码段如下:
// 先初始化并添加所有Tab TabLayout.Tab firstTab = tabLayout.newTab(); firstTab.setText("Chelsea"); tabLayout.addTab(firstTab); TabLayout.Tab secondTab = tabLayout.newTab(); secondTab.setText("Manchester City"); tabLayout.addTab(secondTab); // 再设置Tab选择监听器 tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { Fragment fragment = null; switch (tab.getPosition()) { case 0: fragment = new FragmentHisOne(); break; case 1: fragment = new FragmentHisTwo(); break; default: fragment = new FragmentHisOne(); break; } FragmentManager fm = getSupportFragmentManager(); FragmentTransaction ft = fm.beginTransaction(); ft.replace(R.id.simpleFrameLayout, fragment); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.commit(); } @Override public void onTabUnselected(TabLayout.Tab tab) { } @Override public void onTabReselected(TabLayout.Tab tab) { } }); // 最后执行选中第一个Tab的操作,触发默认加载 tabLayout.selectTab(tabLayout.getTabAt(0));
补充说明
你代码中使用的setOnTabSelectedListener已经被官方废弃,如需适配更高版本Android系统,可以替换为addOnTabSelectedListener,功能逻辑完全一致。
内容的提问来源于stack exchange,提问作者Yotaka Yomoto
相关产品推荐
相关产品推荐

