Android 从片段访问工具栏(MaterialToolbar)?
如何使用Android 从片段访问工具栏(MaterialToolbar)?,android,android-fragments,android-toolbar,android-appcompat,material-components-android,Android,Android Fragments,Android Toolbar,Android Appcompat,Material Components Android,如何使用activity.actionBar从片段访问工具栏(实际上是材质工具栏) main_layout.xml(摘录): MyFragment(摘录): MyFragment中调试语句的输出: DEF: activity == null: false DEF: activity.actionbar == null: true 当我在main活动中使用setSupportActionBar(binding.toolbar)时,activity.actionbar不应该是非空的吗?我做错了什么
activity.actionBar从片段
访问工具栏(实际上是材质工具栏
)
main_layout.xml(摘录):
MyFragment(摘录):
MyFragment中调试语句的输出:
DEF: activity == null: false
DEF: activity.actionbar == null: true
当我在main活动中使用setSupportActionBar(binding.toolbar)
时,activity.actionbar
不应该是非空的吗?我做错了什么
提示:据我所知,我也可以使用activity.findviewbyd(R.id.toolbar)
。这个问题实际上是关于为什么活动。actionBar
不起作用。您可以使用:
(activity as AppCompatActivity).supportActionBar
只是一个小小的解释:
activity
返回一个FragmentActivity
,该活动处理android.app.ActionBar
您正在使用一个appcompat活动
,它处理一个androidx.appcompat.app.ActionBar
它们是不同的。使用(活动作为AppCompatActivity)。SupportAction谢谢你,这很有效!请贴出答案。你知道为什么activity.actionBar
不起作用吗?是activity.actionBar
计划作为“原始”操作栏,您不必手动添加,并且从今天起,该操作栏将禁用NoActionBar
主题?@stefan.at.wpf不完全是android.app.ActionBar
和androidx.appcompat.app.ActionBar
是不同的。AppCompatActivity
在任何情况下都会处理一个androidx.appcompat.app.ActionBar
,如果它是由布局或主题膨胀的。我有一个后续问题:为什么我不能将((活动作为AppCompatActivity.supportActionBar)作为MaterialToolbar
?这给了我java.lang.ClassCastException:androidx.appcompat.app.Toolbar ActionBar不能强制转换为com.google.android.material.appbar.MaterialToolbar
@stefan.at.wpf这是因为ActionBar
不是工具栏。你可以查一下电话号码。
class MyFragment: Fragment() {
[..]
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val actNull = activity == null
Timber.i("DEF: activity == null: $actNull")
var barNull = activity?.actionBar == null
Timber.i("DEF: activity.actionbar == null: $barNull")
}
}
DEF: activity == null: false
DEF: activity.actionbar == null: true
(activity as AppCompatActivity).supportActionBar