使用NavGraph启动Fragment后Toolbar标题消失的问题求助
解决Toolbar标题短暂显示后消失的方案
1. 先修正代码里的语法错误
你提供的setUpNavigationToolbar方法存在括号未闭合的语法问题,这会导致逻辑执行异常,修正后的代码如下:
private void setUpNavigationToolbar(){ final NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.container_fragment); NavController navController = navHostFragment.getNavController(); AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(navController.getGraph()).build(); NavigationUI.setupWithNavController( toolbar, navController, appBarConfiguration); }
2. 检查Fragment内的标题覆盖代码
确认目标Fragment的代码里,没有手动清空或替换Toolbar/ActionBar标题的逻辑,比如以下代码会覆盖NavGraph设置的标题,必须删除:
// 移除这类代码 ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(""); // 或者 toolbar.setTitle("");
3. 确保Toolbar初始化顺序正确
在Activity的onCreate方法中,要先完成布局加载和Toolbar实例化,再调用导航配置方法,顺序如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 先获取Toolbar实例 toolbar = findViewById(R.id.toolbar); // 再执行导航Toolbar配置 setUpNavigationToolbar(); }
4. 调整AppBarConfiguration的配置逻辑
如果NavGraph包含多个目的地,或者标题仍无法持久显示,可以尝试指定具体的Fragment目的地ID来构建AppBarConfiguration:
// 替换原AppBarConfiguration构建代码 AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(R.id.your_target_fragment_id).build();
5. 手动锁定Fragment标题
如果以上方法都无效,可以在目标Fragment的onViewCreated方法中手动设置标题,确保标题持续显示:
@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); if (getActivity() instanceof AppCompatActivity) { ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle("Sample title"); } }
内容的提问来源于stack exchange,提问作者Stephen Nedumpalli
相关产品推荐
相关产品推荐

