如何在Kotlin的Fragment类中更改ActionBar标题?

15

我是Kotlin中的Android开发新手。我尝试了以下代码来从我的片段更改操作栏标题。它没起作用。请帮忙。

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)


    activity.actionBar?.title = "Example 1"
    countBtn.setOnClickListener(this)
    toastBtn.setOnClickListener(this)
    randomBtn.setOnClickListener(this)

}

MainActivity.kt 的代码如下

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    setSupportActionBar(toolbar)
    val actionBar = supportActionBar
    actionBar?.title = getString(R.string.toolbar_title)
}
4个回答

32

看起来你正在设置支持操作栏,所以你在onCreateView方法中也必须使用支持操作栏。 actionBar 是 null,这就是为什么设置标题的代码不会运行。

试试这个:

override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
  super.onViewCreated(view, savedInstanceState)

  (activity as AppCompatActivity).supportActionBar?.title = "Example 1"
  //...
}

我认为你可能会遇到另一个问题,就是你在活动的onCreate方法中添加支持操作栏,但是你尝试根据这个图表,在片段的onViewCreated之前访问它。如果是这种情况,那么你需要进行更改。也许尝试从片段的onStart开始。


活动(Activity)没有 getSuppotActionBar 函数,因此需要转换为 AppCompatActivity(活动兼容性)。 - Mumi
我将代码移动到onStart方法中,并将actionBar更改为supportActionBar。但是,此时supportActionBar变成了未解决的引用。 - bagya gunawardana
哦,抱歉,我忘了提到你需要将活动转换为支持活动(我猜你可以这样做,因为你使用了支持操作栏)。我已经更新了答案。我假设你扩展了AppCompatActivity - Fred
在 Kotlin 语言中,可以使用 this.supportActionBar?.title = "Example 1"。 - Sour LeangChhean

2

1

尝试:

override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    super.onCreateOptionsMenu(menu, inflater)
    inflater.inflate(R.menu.options_menu, menu)

    (activity as AppCompatActivity).supportActionBar?.title = "My Fragment Title"

}

在标题语句的顶部使用 setSupportActionBar(true)。 - malli

1

在onViewCreated方法中对我有效。

override fun onViewCreated() {    
    (activity as AppCompatActivity).setSupportActionBar(toolbar_name)
    (activity as AppCompatActivity).supportActionBar?.title = getString(R.string.title)
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接