【问题标题】:get actionBar inside fragment using androidx使用androidx获取片段内的actionBar
【发布时间】:2019-07-20 10:35:07
【问题描述】:
我只想在一个带有函数的片段中获取 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 是预期的。
有什么帮助吗?
【问题讨论】:
标签:
android
android-fragments
kotlin
android-actionbar
androidx
【解决方案1】:
androidx.fragment.app.Fragment 的 activity 属性为您提供 androidx.fragment.app.FragmentActivity“此片段当前关联”(引用自 Android Studio 中可用的文档)
另一方面,FragmentActivity 的 actionBar 属性将为您提供 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
【解决方案2】:
可能在您的 XML 视图中,您正在定义一个不是 AndroidX 的 actionBar。
翻译后的错误意味着在该函数中您想要返回一个对象 androidx.appcompat.action.ActionBar 但 activity.actionBar 是一个 android.app.ActionBar! 。您必须考虑到这一点并以相应的样式对其进行修改。
希望对你有用。
【解决方案3】:
首先确保你导入了 androidx
导入 androidx.appcompat.app.ActionBar;
初始私有ActionBar actionBar;
然后将其添加到受保护的 void onCreate calss 中
actionBar = getSupportActionBar();
actionBar.setTitle("Your Tittle");
就是这样。