使用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.Fragmentactivity 属性为您提供 androidx.fragment.app.FragmentActivity“此片段当前关联”(引用自 Android Studio 中可用的文档)

另一方面,FragmentActivityactionBar 属性将为您提供 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.ActionBaractivity.actionBar 是一个 android.app.ActionBar! 。您必须考虑到这一点并以相应的样式对其进行修改。

希望对你有用。

【讨论】:

【参考方案3】:

首先确保你导入了 androidx 导入 androidx.appcompat.app.ActionBar;

初始私有ActionBar actionBar;

然后将其添加到受保护的 void onCreate calss 中

    actionBar = getSupportActionBar();
    actionBar.setTitle("Your Tittle");

就是这样。

【讨论】:

以上是关于使用androidx获取片段内的actionBar的主要内容,如果未能解决你的问题,请参考以下文章

片段内的 setSupportActionBar

迁移到 AndroidX 后,findFragmentById 为片段返回 null

使用 ActionBar 旋转 Android 的双片段

启动片段时隐藏ActionBar

Android - 获取当前片段

ClassCastException片段android使用ActionBar