You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在打开Activity时无需点击TabLayout即可自动显示对应Fragment

问题根因

你当前代码的执行顺序逻辑错误,导致默认不会触发Fragment加载:

  • 你提前调用了tabLayout.selectTab(tabLayout.getTabAt(0)),此时还没有往TabLayout中添加任何Tab,getTabAt(0)返回null,选中操作完全无效
  • 后续添加完Tab、设置完Tab选择监听器后,没有再执行选中操作,自然不会触发onTabSelected回调中的Fragment加载逻辑
修复方案

仅需要调整onCreate方法中Tab相关逻辑的执行顺序即可:

  1. 先完成所有Tab的创建和添加操作
  2. 再给TabLayout设置Tab选择监听器
  3. 最后执行选中第一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:39:03