首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >onBackPressed()被否决了,还有什么可供选择的呢?

onBackPressed()被否决了,还有什么可供选择的呢?
EN

Stack Overflow用户
提问于 2022-06-15 15:42:10
回答 9查看 17.6K关注 0票数 54

我已将33.和targetSdkVersioncompileSdkVersion升级为

现在,不建议使用警告onBackPressed

建议使用OnBackInvokedCallbackandroidx.activity.OnBackPressedCallback来处理back导航。任何人都可以帮助我使用更新的方法。

示例:

用例:-在onBackPressed(){}方法中使用if (isTaskRoot) {}检查活动是否在活动堆栈上。

代码语言:javascript
复制
override fun onBackPressed() {
    if (isTaskRoot) { // Check this activity is last on the activity-stack.(Check Whether This activity opened from Push-Notification)
        startActivity(Intent(mContext, Dashboard::class.java))
        finish()
    } else {
        finishWithResultOK()
    }
}
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2022-06-15 16:41:27

根据您的API级别寄存器:

这至少需要使用appcompat:1.6.0-alpha03;当前是1.6.0-alpha04

代码语言:javascript
复制
 implementation 'androidx.appcompat:appcompat:1.6.0-alpha04'
代码语言:javascript
复制
// kotlin
import androidx.activity.addCallback

if (BuildCompat.isAtLeastT()) {
    onBackInvokedDispatcher.registerOnBackInvokedCallback(
        OnBackInvokedDispatcher.PRIORITY_DEFAULT
    ) {
        // Back is pressed... Finishing the activity
        finish()
    }
} else {
    onBackPressedDispatcher.addCallback(this /* lifecycle owner */, object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            // Back is pressed... Finishing the activity
            finish()
        }
    })
}

更新:

感谢@ianhanniballake的评论;您甚至可以在API级别的OnBackPressedDispatcher中使用33+。

当使用Activity时,OnBackPressedDispatcher已经在内部使用Android特定的API,

所以,你可以这么做:

代码语言:javascript
复制
// kotlin
import androidx.activity.addCallback

onBackPressedDispatcher.addCallback(this /* lifecycle owner */, object : OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
        // Back is pressed... Finishing the activity
        finish()
    }
})
代码语言:javascript
复制
// java
import androidx.activity.OnBackPressedCallback;

getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
    @Override
    public void handleOnBackPressed() {
        // Back is pressed... Finishing the activity
        finish();
    }
});

请注意,您不应该覆盖onBackPressed(),因为这将使onBackPressedDispatcher回调不会触发;请检查这个答案以澄清这一点。

票数 44
EN

Stack Overflow用户

发布于 2022-10-03 11:39:31

用下面的代码替换onBackPressed()。

代码语言:javascript
复制
onBackPressedDispatcher.onBackPressed()
票数 18
EN

Stack Overflow用户

发布于 2022-10-15 08:49:39

与顶级答案的组合。下面是一个解决方案:

1.当您需要按后退按钮时,复制以下内容:

注意:它会自动破坏你的活动。

代码语言:javascript
复制
button.setOnClickListener {
    onBackPressedDispatcher.onBackPressed()
}

2.当您需要处理按下的后退按钮时,复制以下内容:

代码语言:javascript
复制
onBackPressedDispatcher.addCallback(this, object: OnBackPressedCallback(true) {
    override fun handleOnBackPressed() {
        // Whatever you want
        // when back pressed
        println("Back button pressed")
        finish()
    }
})
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72634225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档