我的应用程序目前停留在物理后退按钮的无限循环中。该程序设置为加载启动画面,然后转换到主菜单。一旦进入主菜单,用户就可以切换到他们选择的另一个活动。例如:新的游戏活动。一旦用户进入新的游戏活动,我希望他们能够点击后退按钮并将其带到主菜单。一旦回到主菜单,如果他们再次点击后退按钮,我希望它退出游戏。
这是我为每项活动使用的内容:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
startActivity(new Intent(NewGameActivity.this, MenuActivity.class));
}
return super.onKeyDown(keyCode, event);
}
它可以正常工作并将用户带回主菜单而不会出现问题。但是如果用户在主菜单上再次点击后退按钮,它将把他们带到他们刚从中逃出的屏幕。所以它每次都会循环回到上一个屏幕。
这是主菜单的设置方式:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
stopService(new Intent(MenuActivity.this, BGMusicService.class));
MenuActivity.this.finish();
}
return super.onKeyDown(keyCode, event);
}
如果我第一次加载主菜单时按下后退按钮它将正常工作并关闭游戏。如果我之前点击后退按钮从一个屏幕进入主菜单,它只会搞砸。
更新
好的,那种工作。当我点击主屏幕上的后退按钮时,音乐停止,它就像试图关闭应用程序一样,但它会再次闪回主屏幕。我每次都要打两次。
答案 0 :(得分:2)
您应该在活动的onKeyDown
方法中调用finish()
,以便实际从堆栈中删除当前活动。
这样的事情应该有效:
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_BACK)
{
startActivity(new Intent(NewGameActivity.this, MenuActivity.class));
finish();
}
return super.onKeyDown(keyCode, event);
}
答案 1 :(得分:1)
首先(来自评论)在return true;
语句中添加if
(表示您已经处理了该事件),如下所示:
// Main menu code
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
stopService(new Intent(MenuActivity.this, BGMusicService.class));
MenuActivity.this.finish();
return true; // Add me!
}
return super.onKeyDown(keyCode, event);
}
此外,我相信因为您再次“启动”菜单活动,您必须在打开它之前清除后台堆栈(目前使用的活动顺序)。您应该能够使用Intent.FLAG_ACTIVITY_CLEAR_TOP
(或者Intent.FLAG_ACTIVITY_CLEAR_TASK
)来实现此目的。像这样:
// Other activity code
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
Intent menuIntent = new Intent(NewGameActivity.this, MenuActivity.class);
menuIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // Add me!
startActivity(menuIntent);
return true; // Add me, too!
}
return super.onKeyDown(keyCode, event);
}
答案 2 :(得分:0)
您还没有在其他活动中调用finish()
,因此当您在菜单上调用finish()
时,它会自行关闭而其他活动会曝光