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