如何在按下 android phone 的后退按钮时 stop/cancel 运行?
How to stop/cancel a runnable when pressing on android phone's back button?
在我的项目中,我有一个名为“ExamMenuActivity”的 activity,我可以在其中选择“加法、减法、乘法和除法”活动。
另外 activity(称为 ExamAdditionActivity)我有一个处理程序方法可以在给定答案后重新生成问题表单。一切似乎都很好,我可以生成问题并给出答案,给出答案后,一个新问题会在 2 秒内生成。
我遇到的问题是,在我给出正确或错误的答案后,在 2 秒内,如果我快速按下 phone 的后退按钮并且不等待要重新生成的问题,我按需要返回到考试菜单页面(返回到 ExamMenuActivity),但屏幕变回了 ExamAdditionActivity,我又看到了一个新生成的问题。
所以我希望能够在问题重新生成之前按下 phone 的后退按钮时再次返回考试菜单 activity 而我不想返回ExamAdditionActivity 再次出现一个新生成的问题(假设我在回答一个附加问题后改变了主意,我想从菜单中选择另一个 activity,但我没有等待至少 2 秒)。
我尝试用 onBackPressed 方法覆盖 activity:
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
但不幸的是那没有用。
这是我重新生成问题的方法。我基本上用一个处理程序在两秒钟内重新启动了相同的 activity(我的处理程序代码中有一个可运行的,但由于它显示为匿名,android studio 让我将其更改为 lambda 函数):
private void regenerateQuestion() {
new Handler().postDelayed(() -> {
Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);
overridePendingTransition(0, 0);
startActivity(restartExamAdditionActivity);
finish();
overridePendingTransition(0, 0);
}, TIME_OUT);
}
尽管我不确定,但我认为我在按钮侦听器区域遇到了问题,因为我给出了问题的答案并在每个按钮下调用了 regenetate() 方法。
希望我的问题能得到解答。非常感谢您来看我的 post!
创建你的 Handler
作为你的 class 的成员变量,像这样:
Handler myHandler = new Handler();
创建你的 Runnable
作为你的 class 的成员变量,像这样:
Runnable myRunnable = new Runnable() {
@Override
public void run() {
Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);
overridePendingTransition(0, 0);
startActivity(restartExamAdditionActivity);
finish();
overridePendingTransition(0, 0);
}
};
Post Runnable
使用新变量:
myHandler.postDelayed(myRunnable, TIME_OUT);
如果要取消重新生成,请执行以下操作:
myHandler.removeCallbacks(myRunnable);
在我的项目中,我有一个名为“ExamMenuActivity”的 activity,我可以在其中选择“加法、减法、乘法和除法”活动。
另外 activity(称为 ExamAdditionActivity)我有一个处理程序方法可以在给定答案后重新生成问题表单。一切似乎都很好,我可以生成问题并给出答案,给出答案后,一个新问题会在 2 秒内生成。
我遇到的问题是,在我给出正确或错误的答案后,在 2 秒内,如果我快速按下 phone 的后退按钮并且不等待要重新生成的问题,我按需要返回到考试菜单页面(返回到 ExamMenuActivity),但屏幕变回了 ExamAdditionActivity,我又看到了一个新生成的问题。
所以我希望能够在问题重新生成之前按下 phone 的后退按钮时再次返回考试菜单 activity 而我不想返回ExamAdditionActivity 再次出现一个新生成的问题(假设我在回答一个附加问题后改变了主意,我想从菜单中选择另一个 activity,但我没有等待至少 2 秒)。 我尝试用 onBackPressed 方法覆盖 activity:
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
但不幸的是那没有用。
这是我重新生成问题的方法。我基本上用一个处理程序在两秒钟内重新启动了相同的 activity(我的处理程序代码中有一个可运行的,但由于它显示为匿名,android studio 让我将其更改为 lambda 函数):
private void regenerateQuestion() {
new Handler().postDelayed(() -> {
Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);
overridePendingTransition(0, 0);
startActivity(restartExamAdditionActivity);
finish();
overridePendingTransition(0, 0);
}, TIME_OUT);
}
尽管我不确定,但我认为我在按钮侦听器区域遇到了问题,因为我给出了问题的答案并在每个按钮下调用了 regenetate() 方法。
希望我的问题能得到解答。非常感谢您来看我的 post!
创建你的 Handler
作为你的 class 的成员变量,像这样:
Handler myHandler = new Handler();
创建你的 Runnable
作为你的 class 的成员变量,像这样:
Runnable myRunnable = new Runnable() {
@Override
public void run() {
Intent restartExamAdditionActivity = new Intent(ExamAdditionActivity.this, ExamAdditionActivity.class);
overridePendingTransition(0, 0);
startActivity(restartExamAdditionActivity);
finish();
overridePendingTransition(0, 0);
}
};
Post Runnable
使用新变量:
myHandler.postDelayed(myRunnable, TIME_OUT);
如果要取消重新生成,请执行以下操作:
myHandler.removeCallbacks(myRunnable);