我只想在带有功能的片段中获取actionBar,而我正在使用Kotlin语言和AndroidX。
这是我的代码:
import androidx.appcompat.app.ActionBar
import androidx.fragment.app.Fragment
class TestFragment : Fragment() {
fun getActiobar() : ActionBar
{
return activity.actionBar
}
}
但我收到此错误:
类型不匹配:推断的类型为android.app.ActionBar!但应该是androidx.appcompat.app.ActionBar。
有什么帮助吗?
答案 0 :(得分:1)
activity
的{{1}}属性为您提供androidx.fragment.app.Fragment
“此片段当前与之相关”(引自Android Studio中的文档)
另一方面,androidx.fragment.app.FragmentActivity
的{{1}}属性将为您提供一个actionBar
,它与旧版FragmentActivity
或其等效的AndroidX android.app.ActionBar
不兼容
由于android.support.v7.app.ActionBar
没有androidx.appcompat.app.ActionBar
属性,因此您必须将FragmentActivity
强制转换为supportActionBar
:
FragmentActivity
注意:我添加了“?”因为androidx.appcompat.app.AppCompatActivity
可能是import androidx.appcompat.app.ActionBar
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
class TestFragment: Fragment() {
fun getActionbar() : ActionBar?
{
return (activity as AppCompatActivity).supportActionBar
}
}
答案 1 :(得分:0)
可能是在XML视图中定义了一个不是AndroidX的actionBar。
翻译后的错误意味着在该函数中您想返回一个对象androidx.appcompat.action.ActionBar
,但是activity.actionBar
是一个android.app.ActionBar!
。您必须考虑到这一点,并以相应的样式对其进行修改。
我希望您觉得它有用。
答案 2 :(得分:0)
首先请确保您导入androidx 导入androidx.appcompat.app.ActionBar;
初始私有ActionBar actionBar;
然后将其添加到受保护的void onCreate calss中
actionBar = getSupportActionBar();
actionBar.setTitle("Your Tittle");
仅此而已。