Androidx Activity OnBackPressedCallback Проблема с интерфейсом - PullRequest
4 голосов
/ 15 марта 2019
implementation("androidx.core:core-ktx:1.1.0-alpha04")
implementation ("androidx.appcompat:appcompat:1.0.2")
implementation ("androidx.activity:activity-ktx:1.0.0-alpha05")

Я также смотрел на это Почему у них 2 разных класса ComponentActivity? У меня есть эта библиотека и я надеюсь использовать OnBackPressedCallback

import android.os.Bundle
import androidx.activity.OnBackPressedCallback
import androidx.fragment.app.Fragment

open class BaseNiceFragment : Fragment(), OnBackPressedCallback {

    override fun handleOnBackPressed(): Boolean {
       // do some nice things here
       return true
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
       super.onActivityCreated(savedInstanceState)
       activity!!.addOnBackPressedCallback(viewLifecycleOwner, this)
    }

    override fun onDestroyView() {
       super.onDestroyView()
       activity!!.removeOnBackPressedCallback(this)
    }

    protected open fun handleEmptyView(isListEmpty: Boolean) {} 
}

Он отлично работает с отладочными сборками в Android Studio, но всякий раз, когда я пытаюсь сделать app:compileFullReleaseKotlin, я продолжаю сталкиваться со следующими проблемами

BaseNiceFragment.kt: (_, _): Unresolved reference: OnBackPressedCallback

Любой или Ян знают, как убедиться, что это включено во всеиз моих сборок

public interface OnBackPressedCallback {
 //...
}

Ответы [ 2 ]

15 голосов
/ 15 марта 2019

Вы смешиваете стабильные версии (appcompat:1.0.2 и fragment:1.0.0, от которых это зависит) с альфа-версиями. Только Фрагмент 1.1.0 альфа-версии FragmentActivity зависит от androidx.activity ComponentActivity и поэтому включает метод addOnBackPressedCallback.

Вам необходимо специально включить androidx.fragment:fragment:1.1.0-alpha05 или переключить свою зависимость AppCompat на androidx.appcompat:appcompat:1.1.0-alpha03 (которая транзитивно зависит от фрагмента 1.1.0-alpha05).

1 голос
/ 13 июня 2019

Насколько мне известно, это все, что мне нужно вместо загрузки других зависимостей в качестве верхнего ответа androidx.appcompat:appcompat:1.1.0-beta01

...