在Android中实现自定义后退导航

时间:2019-06-18 01:38:51

标签: android kotlin androidx onbackpressed

我正在尝试根据文档here

在片段中实现自定义向后导航

但是当我尝试用后退按钮evet代码替换“ //处理后退按钮事件”位时,我的IDE抛出错误,提示“必需:找到OnBackPressedCallback()-> OnBackPressedCallback”

我正在使用appcompat:1.0.2。我有core-ktx:1.0.2'。

  

实现'androidx.appcompat:appcompat:1.0.2'

     

实现'androidx.core:core-ktx:1.0.2'

这是我尝试实现onBackPressedDispatcher的方式

val callback = requireActivity().onBackPressedDispatcher.addCallback(this) {
        patientsActivity.moveToLoginScreen(true) // <-- thing I want to happen when the back button is pressed
    }

我在这里想念什么?我该如何实施自定义反向导航?

4 个答案:

答案 0 :(得分:0)

OnBackPressedDispatcher是新的androidx.activity依赖项的一部分。获得对新库的访问权限的最佳方法是升级Fragments版本:

implementation "androidx.fragment:fragment-ktx:1.1.0-beta01"

通过使用fragment-ktx工件,您还将获得对activity-ktx的传递依赖,该依赖关系是文档使用的Kotlin扩展。

答案 1 :(得分:0)

代码问题不在gradle文件上,而在语法上。该文档未提供与给出的Java代码相对应的正确的kotlin代码。

这是创建抽象类对象的正确方法-OnBackPressedCallback

val callback = requireActivity().onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
        patientsActivity.moveToLoginScreen(true)
    }
})

支持此处的文档更改:https://issuetracker.google.com/issues/135469965

答案 2 :(得分:0)

具体来说,您需要import androidx.activity.addCallback,并在应用程序build.gradle中,implementation "androidx.fragment:fragment-ktx:1.1.0-beta01"

答案 3 :(得分:0)

您尚未传递布尔参数,这就是为什么它不起作用的原因。正确的代码如Jian Astrero's answer中所示。另外,您可以使用如下lambda语法:

val callback = requireActivity().onBackPressedDispatcher.addCallback(this, true) {
    patientsActivity.moveToLoginScreen(true)
}

请注意,作为第二个参数传递的 true 对于它的工作至关重要。