我最近在很多Android应用程序和游戏中注意到了这种模式:当单击Back按钮"退出"应用程序时,Toast会弹出类似于"请再次单击Back按钮退出"的消息.

我想知道,正如我越来越经常看到的那样,这是一个内置的功能,您可以通过某种方式在活动中访问它吗?我看过许多类的源代码,但似乎找不到任何关于这方面的内容.

当然,我可以很容易地想出几种方法来实现相同的功能(最简单的方法可能是在活动中保留一个布尔值,以指示用户是否已经单击过一次……)但我想知道这里是不是已经有什么东西了.

EDIT:正如@LAS_VEGAS提到的,我的意思并不是传统意义上的"退出".(即终止)我的意思是"返回到应用程序启动活动启动之前打开的任何内容",如果这有意义的话:)

推荐答案

在Java活动中:

boolean doubleBackToExitPressedOnce = false;

@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
        
    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
        
    new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
        
        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;                       
        }
    }, 2000);
} 

在Kotlin 活动中:

private var doubleBackToExitPressedOnce = false
override fun onBackPressed() {
        if (doubleBackToExitPressedOnce) {
            super.onBackPressed()
            return
        }

        this.doubleBackToExitPressedOnce = true
        Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show()

        Handler(Looper.getMainLooper()).postDelayed(Runnable { doubleBackToExitPressedOnce = false }, 2000)
    }

我认为这个处理程序有助于在2秒钟后重置变量.

Java相关问答推荐

JPackage-results已安装-如何添加系统属性?

gitlab ci不会运行我的脚本,因为它需要数据库连接'

BiPredicate和如何使用它

Java中不同包中的类之间的配置共享

Springdoc Whitelabel Error Page with Spring V3

S的字符串表示是双重精确的吗?

内存中的H2修剪尾随空格

使用Room Database删除Jetpack合成中的所有项目后,UI未重新合成

如何将Java文档配置为在指定的项目根目录中生成?

try 使用Spring集成和MySQL实现发件箱模式时,锁定等待超时

错误:未找到扩展元素在JBossEAP 7.2中安装FUSE时出错

通过Java列表中的某些字段搜索值

我该如何为我的类编写getter和setter方法?

Java类型推断:为什么要编译它?

如何使用Java ZoneID的区域设置?

为什么我的登录终结点不能被任何请求访问?

无限递归Java问题

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

如何在JSP中从select中获取值并将其放入另一个select

如何在Java中正确实现填字游戏求解器