使用androidx获取片段内的actionBar
Posted
技术标签:
【中文标题】使用androidx获取片段内的actionBar【英文标题】:get actionBar inside fragment using androidx 【发布时间】: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 是预期的。
有什么帮助吗?
【问题讨论】:
【参考方案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");
就是这样。
【讨论】:
以上是关于使用androidx获取片段内的actionBar的主要内容,如果未能解决你的问题,请参考以下文章