按下后退按钮时Android关闭应用程序

时间:2011-11-24 08:29:13

标签: android

您好我在我的应用程序中进行了修改,我想在单击后退按钮后关闭我的应用程序。这可能听起来很常见吗?但这正是我的应用程序发生的事情。我有3个屏幕:起始页面,游戏页面和分数页面。从“开始”页面按下开始按钮后,它将启动游戏页面意图。完成游戏后,游戏页面会将意图移动到分数页面,当从分数页面按下后退按钮时,意图将在起始页面上传递,如下所示:

  1. 起始页 - >游戏页面
  2. 游戏页面 - >分数页
  3. 得分页面(按下后退按钮时) - >起始页
  4. 现在当我再次按下后退按钮而不退出应用程序后返回起始页面时,它将返回到分数页面并再次如果我按下后退按钮它将再次进入起始页面无尽的循环。我将此代码放在我的起始页面上,但它无法解决我的问题:

    @Override
    public void onBackPressed() {
        Startup.this.finish();
    }
    

    我是否需要更改我的意图流程或者有一个可能的解决方案?

4 个答案:

答案 0 :(得分:8)

或者,您可以在“分数”页面中调用“开始”页面时使用标志Intent.FLAG_ACTIVITY_CLEAR_TOP。

Intent intent = new Intent(this, StartActivity.class)
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

答案 1 :(得分:2)

只需在游戏页面上添加此代码段

即可
//just after your startActivity(scoreIntent)
this.finish();

这将在启动乐谱活动之前完成游戏活动。 现在,当您想要结束分数活动时,不要使用开始活动启动新意图,而只是结束您的分数活动(这意味着,将反向回调保留为默认值。

这是有效的,因为如果你在自然结束时关闭游戏活动,你的堆栈中第二个最顶层的活动将是开始的活动。这允许您结束最顶层的活动(得分1)以检索起始页。

注意:此解决方案仅适用于您当前的工作流程。如果你添加另一个页面(例如start-game-gameover-score),你需要在每个非外部活动中复制这种行为(在前面的例子中,在游戏和配子页面中)

答案 2 :(得分:1)

当游戏页面的startActivity执行以下操作时,在StartPage中

  startActivity(intent);//intent for GamePage
  finish();
当分数页面的startActivity执行以下操作时,在游戏页面中

  startActivity(intent);//intent for Score Page
  finish();
按BackButton时,在分数页面中

执行以下操作

startActivity(intent);//intent for StartPage
  finish();

答案 3 :(得分:1)

每当您使用新意图调用新活动时,请编写

finish();

startActivity()之后。

请在致电新活动后写下finish()后进行检查。

另一种选择。 在您的manifest文件中写入launchmode,这些活动只调用一次

清单文件 - &gt; <activity android:name="Main" android:launchMode="singleTask" />