在Fragment创建时动态修改ActionBar标题失效如何解决
Fragment动态修改ActionBar标题不生效的解决方案
核心原因
大多数项目现在使用AppCompatActivity作为基类,默认使用兼容包提供的SupportActionBar而非系统原生ActionBar,调用activity?.actionBar会拿到空对象,所以修改操作无效。
可直接使用的修复方案
- 方案1:改用SupportActionBar操作
先将宿主Activity强转为AppCompatActivity后调用兼容ActionBar的API,建议在Fragment的onViewCreated或onStart生命周期执行,避免Activity未绑定完成:(activity as? AppCompatActivity)?.supportActionBar?.run { setDisplayShowTitleEnabled(true) title = movie.title } - 方案2:直接操作Toolbar实例
如果你的项目使用自定义Toolbar替换了ActionBar,或者Activity主题配置了windowNoTitle = true,直接修改Toolbar本身的标题即可:// 替换成你布局里Toolbar对应的id (activity as? AppCompatActivity)?.findViewById<Toolbar>(R.id.toolbar)?.title = movie.title
额外注意事项
- 确保宿主Activity已经调用过
setSupportActionBar(your_toolbar)完成Toolbar和ActionBar的绑定 - 不要在Fragment的
onCreate生命周期执行标题修改,此时Fragment尚未和Activity完成绑定,大概率无法获取到有效Activity实例
内容的提问来源于stack exchange,提问作者Dragos Ciupe
相关产品推荐
相关产品推荐

