我只是想在一个带有函数的片段中获取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。
任何帮助?
activity
的androidx.fragment.app.Fragment
属性为您提供androidx.fragment.app.FragmentActivity
“此片段目前与之关联”(引自Android Studio中提供的文档)
另一方面,actionBar
的FragmentActivity
属性将给你一个android.app.ActionBar
,它与传统的android.support.v7.app.ActionBar
或其AndroidX等效的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
}
}
注意:我添加了“?”因为supportActionBar
可能是null
可能在您的XML视图中,您定义的是不是AndroidX的actionBar。
翻译的错误意味着在该函数中你想要返回一个对象androidx.appcompat.action.ActionBar
,但activity.actionBar
是一个android.app.ActionBar!
。您必须考虑到这一点并在相应的样式中进行修改。
希望对你有帮助。