底部导航栏启动时默认加载片段与选中菜单项不匹配问题求助
问题根因
你当前的初始化流程仅完成了默认Fragment的加载操作,没有主动触发底部导航栏的选中逻辑,底部导航栏会默认选中菜单配置中排序第一的项,因此出现实际加载Fragment与导航选中项不匹配的问题。
修复步骤
- 修改
onCreate中的初始化代码,加载完默认Fragment后,主动调用方法选中Home对应菜单项:
btmNav = findViewById(R.id.btmnav); btmNav.setOnNavigationItemSelectedListener(navListner); // 加载默认展示的Fragment,注意和Home项对应的Fragment保持一致 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new RecViewFragment()).commit(); // 新增这行代码,手动设置默认选中Home菜单项 btmNav.setSelectedItemId(R.id.navhome);
- 对齐导航监听逻辑
注意你当前导航选中监听中,R.id.navhome分支加载的是Fragment2,但初始化时加载的是RecViewFragment,需要把该分支的代码修改为加载RecViewFragment,避免后续点击Home项时加载的页面和默认页面不一致:
case R.id.navhome: getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container,new RecViewFragment()) .commit(); break;
可选优化
如果想要减少页面切换时的性能消耗,可以提前初始化所有Fragment实例,切换时使用show/hide方法控制显示隐藏,代替每次replace重新创建Fragment实例。
内容的提问来源于stack exchange,提问作者Deepak Chauhan
相关产品推荐
相关产品推荐

