Java Android Studio如何为单键和双键返回按钮按下执行不同的任务

Java Android Studio如何为单键和双键返回按钮按下执行不同的任务,java,android,android-studio,onbackpressed,Java,Android,Android Studio,Onbackpressed,关于“点击后退按钮两次以退出活动”和类似的事情有很多答案,但我试图对我的项目做的是,我想为单次和双击后退按钮做不同的事情 例如,在我的例子中,如果按下后退按钮一次,同时显示“再次按下后退退出”的祝酒词,并且如果用户这样做,则我希望转到我的应用程序的主屏幕/主要活动,而应用程序正是这样做的。 我真的很难为此编写代码 我已经试过了,但没有达到预期效果,即使在双击的情况下,应用程序也不会退出。 感谢您的帮助。 我的代码 您所处的轨道是正确的,但这是因为您正在设置mBackPressed=System.

关于“点击后退按钮两次以退出活动”和类似的事情有很多答案,但我试图对我的项目做的是,我想为单次和双击后退按钮做不同的事情 例如,在我的例子中,如果按下后退按钮一次,同时显示“再次按下后退退出”的祝酒词,并且如果用户这样做,则我希望转到我的应用程序的主屏幕/主要活动,而应用程序正是这样做的。 我真的很难为此编写代码 我已经试过了,但没有达到预期效果,即使在双击的情况下,应用程序也不会退出。 感谢您的帮助。 我的代码


您所处的轨道是正确的,但这是因为您正在设置
mBackPressed=System.currentTimeMillis()每次按下后退按钮时,它将永远不会通过第一条if语句。你似乎还想追踪他们点击后退按钮的次数

试试这个

private static final int TIME_INTERVAL = 2000;
private long mBackPressed = -1;
private int clicks = 0;

public void onBackPressed() {
    if (mBackPressed == -1) //checks if the time hasnt been set yet
        mBackPressed = System.currentTimeMillis();
    clicks++; //or you can put this in the if statement below
    if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis()) {
        super.onBackPressed();
        return;
    } else {
        Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        mBackPressed = -1; //resets the time the click was made
        clicks = 0; //resets the clicks
    }
}

您所处的轨道是正确的,但这是因为您正在设置
mBackPressed=System.currentTimeMillis()每次按下后退按钮时,它将永远不会通过第一条if语句。你似乎还想追踪他们点击后退按钮的次数

试试这个

private static final int TIME_INTERVAL = 2000;
private long mBackPressed = -1;
private int clicks = 0;

public void onBackPressed() {
    if (mBackPressed == -1) //checks if the time hasnt been set yet
        mBackPressed = System.currentTimeMillis();
    clicks++; //or you can put this in the if statement below
    if (mBackPressed + TIME_INTERVAL > System.currentTimeMillis()) {
        super.onBackPressed();
        return;
    } else {
        Toast.makeText(getBaseContext(), "Tap back button in order to exit", Toast.LENGTH_SHORT).show();
        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        mBackPressed = -1; //resets the time the click was made
        clicks = 0; //resets the clicks
    }
}

此方法可能是一个简单的解决方案:

@Override
public void onBackPressed() {
     private final static int TIME_INTERVAL = 500;
     long backPressed = 0L;

     if ((System.currentTimeMillis() - backPressed < TIME_INTERVAL))
            System.exit(0); // do what you want on double click
     else {
            backPressed = System.currentTimeMillis();
            getSnackbar(R.string.double_back_press_message,Snackbar.LENGTH_SHORT).show();
            super.onBackPressed();
      }
}
@覆盖
public void onBackPressed(){
专用最终静态整数时间间隔=500;
长背压=0升;
if((System.currentTimeMillis()-反压<时间间隔))
System.exit(0);//双击即可执行所需操作
否则{
backPressed=System.currentTimeMillis();
getSnackbar(R.string.double_back_press_消息,Snackbar.LENGTH_SHORT).show();
super.onBackPressed();
}
}

此方法可能是一个简单的解决方案:

@Override
public void onBackPressed() {
     private final static int TIME_INTERVAL = 500;
     long backPressed = 0L;

     if ((System.currentTimeMillis() - backPressed < TIME_INTERVAL))
            System.exit(0); // do what you want on double click
     else {
            backPressed = System.currentTimeMillis();
            getSnackbar(R.string.double_back_press_message,Snackbar.LENGTH_SHORT).show();
            super.onBackPressed();
      }
}
@覆盖
public void onBackPressed(){
专用最终静态整数时间间隔=500;
长背压=0升;
if((System.currentTimeMillis()-反压<时间间隔))
System.exit(0);//双击即可执行所需操作
否则{
backPressed=System.currentTimeMillis();
getSnackbar(R.string.double_back_press_消息,Snackbar.LENGTH_SHORT).show();
super.onBackPressed();
}
}