如何执行两次按回退以退出所有活动

时间:2018-12-12 14:25:44

标签: java android

我已实施两次回退以退出活动。但是问题是我必须在每个活动中复制并粘贴相同的代码,以使其适用于每个活动。 我不能创建一个通用类并放置我的实现,因为活动已经扩展了AppCompatActivity,据我所知;不支持多重继承。 那我该怎么做

这是我的实现,欢迎提出建议。

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().postDelayed(new Runnable() {

        @Override
        public void run() {
            doubleBackToExitPressedOnce=false;
        }
    }, 2000);
}

4 个答案:

答案 0 :(得分:3)

您可以创建自己的自定义Activity,该自定义扩展AppCompatActivity并放在其中,然后让您的其他每个活动扩展自定义Activity而不是AppCompatActivity 。这不是多重继承

答案 1 :(得分:0)

创建您自己的自定义(BaseActivity扩展AppCompatActivity)并将OnBackPressed()实现放入BaseActivity,然后扩展BaseActivity的所有活动。

答案 2 :(得分:0)

不要听别人告诉您创建静态方法。而是,创建一个自定义Activity类,并使所有类扩展该类。在该类中,将您的自定义onBackPressed功能。

另一种选择是将单个活动与多个片段一起进行,而您只需要在一个地方实施反向压制即可。

答案 3 :(得分:-1)

首先覆盖后退点击监听器:

@Override
public void onBackPressed() {
    super.onBackPressed();
}

删除super.onBackPressed();

添加此代码:

private static final int MIN_TIME_INTERVAL_BETWEEN_BACK_CLICKS = 2000; // # milliseconds, desired time passed between two back presses.
private long backPressedTime;

@Override
public void onBackPressed() {
    if (backPressedTime + MIN_TIME_INTERVAL_BETWEEN_BACK_CLICKS > System.currentTimeMillis()) {
        finishAffinity();
        return;
    }
    else {
        Toast.makeText(this, "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
    }

    backPressedTime = System.currentTimeMillis();
}