使用androidx获取actionBar里面的片段

问题描述 投票:1回答:2

我只是想在一个带有函数的片段中获取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
2个回答
1
投票

activityandroidx.fragment.app.Fragment属性为您提供androidx.fragment.app.FragmentActivity“此片段目前与之关联”(引自Android Studio中提供的文档)

另一方面,actionBarFragmentActivity属性将给你一个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


0
投票

可能在您的XML视图中,您定义的是不是AndroidX的actionBar。

翻译的错误意味着在该函数中你想要返回一个对象androidx.appcompat.action.ActionBar,但activity.actionBar是一个android.app.ActionBar!。您必须考虑到这一点并在相应的样式中进行修改。

希望对你有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.