получить actionBar внутри фрагмента используя androidx - PullRequest
0 голосов
/ 26 февраля 2019

Я просто хочу получить 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.

любая помощь?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Свойство activity androidx.fragment.app.Fragment дает androidx.fragment.app.FragmentActivity «с которым в данный момент связан этот фрагмент» (цитируется в документации, доступной в Android Studio)

Свойство actionBar FragmentActivity с другой стороны, вы получите 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 голосов
/ 26 февраля 2019

Возможно, в своем представлении XML вы определяете actionBar, который не является AndroidX.

Переведенная ошибка означает, что в этой функции вы хотите вернуть объект androidx.appcompat.action.ActionBar, но activity.actionBar - это android.app.ActionBar!Вы должны принять это во внимание и изменить его в соответствующих стилях.

Надеюсь, вы найдете это полезным.

...