![](/img/trans.png)
[英]How to stop the program when pressing a certain button on the keyboard, for example s
[英]How to stop/cancel a runnable when pressing on android phone's back button?
在我的项目中,我有一个名为“ExamMenuActivity”的活动,我可以在“加法、减法、乘法和除法”活动之间进行选择。
在 Addition 活动(称为 ExamAdditionActivity)中,我有一个处理程序方法可以在给定答案后重新生成问题表单。 一切似乎都很好,我可以生成问题并给出答案,给出答案后,2 秒内就会生成一个新问题。
我遇到的问题是,在我对问题给出正确或错误的答案后,在 2 秒内,如果我快速按下手机的后退按钮并且不等待问题重新生成,我会回到我想要的考试菜单页面(返回到 ExamMenuActivity),但屏幕变回 ExamAdditionActivity 并且我再次看到一个新生成的问题。
因此,当我在问题重新生成之前按下手机的后退按钮时,我希望能够再次回到考试菜单活动,并且我不想用新生成的问题再次面对 ExamAdditionActivity(比如我改变了我的在回答一个附加问题后介意,我想从菜单中选择另一个活动,我没有等待至少 2 秒)。 我尝试使用 onBackPressed 方法覆盖活动:
@Override
public void onBackPressed() {
super.onBackPressed();
finish();
}
但不幸的是,这没有用。
这是我如何重新生成问题。 我基本上用一个处理程序在两秒钟内重新启动相同的活动(我的处理程序代码中有一个可运行但由于它显示匿名,android 工作室让我将其更改为 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() 方法。
我希望我的问题能有答案。 非常感谢您过来查看我的帖子!
创建您的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);
}
};
使用新变量发布Runnable
:
myHandler.postDelayed(myRunnable, TIME_OUT);
如果要取消重新生成,请执行以下操作:
myHandler.removeCallbacks(myRunnable);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.