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

应用启动时Fragment未显示,底部导航切换正常,如何设置默认显示?

这是个非常常见的小问题,只需要在Activity初始化阶段主动加载默认Fragment就能解决,我给你一步步拆解修改方案:

解决方案

1. 在MainActivity中添加默认Fragment加载逻辑

核心思路是:App启动时,主动将你想要默认显示的Fragment加载到布局的FrameLayout容器中,同时把底部导航栏的对应选项设为选中状态,保持UI和内容一致。

示例代码(MainActivity.java)

public class MainActivity extends AppCompatActivity {
    private Fragment currentFragment;
    private BottomNavigationView bottomNavigationView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        bottomNavigationView = findViewById(R.id.bottom_navigation);
        
        // 1. 设置底部导航栏默认选中的选项(替换成你自己的menu item id)
        bottomNavigationView.setSelectedItemId(R.id.nav_item_first);
        
        // 2. 主动加载默认Fragment
        loadDefaultFragment();

        // 3. 底部导航栏的切换监听(如果还没实现的话)
        bottomNavigationView.setOnItemSelectedListener(item -> {
            switch (item.getItemId()) {
                case R.id.nav_item_first:
                    replaceFragment(new FirstFragment());
                    return true;
                case R.id.nav_item_second:
                    replaceFragment(new SecondFragment());
                    return true;
                default:
                    return false;
            }
        });
    }

    // 加载默认Fragment的方法
    private void loadDefaultFragment() {
        currentFragment = new FirstFragment();
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.fragment_container, currentFragment)
                .commit();
    }

    // 通用的Fragment替换工具方法
    private void replaceFragment(Fragment fragment) {
        if (fragment != currentFragment) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .commit();
            currentFragment = fragment;
        }
    }
}

2. 确认布局文件的FrameLayout配置

确保你的activity_main.xml中,承载Fragment的FrameLayout有正确的id(和上面代码中的fragment_container对应),示例布局片段:

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1" />

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:menu="@menu/bottom_nav_menu" />

关键说明

底部导航栏的点击监听只有在用户手动点击时才会触发,App启动时没有这个触发事件,所以我们必须手动执行一次默认Fragment的加载操作,同时同步选中对应的导航项,这样视觉和内容就能统一啦。

内容的提问来源于stack exchange,提问作者Olli Toivanen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:26:50