使用androidx获取片段内的actionBar

时间:2019-02-26 19:50:49

标签: android android-fragments kotlin android-actionbar androidx

我只想在带有功能的片段中获取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。

有什么帮助吗?

3 个答案:

答案 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");

仅此而已。