Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按下后退按钮时关闭Android应用程序_Android - Fatal编程技术网

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

按下后退按钮时关闭Android应用程序,android,Android,嗨,我在我的应用程序中做了一个修改,我想在点击后退按钮后关闭我的应用程序。这听起来可能很普通,对吧?但这正是我的应用程序所发生的。我有3个屏幕:开始页面、游戏页面和得分页面。从开始页面按下开始按钮后,将开始游戏页面。游戏结束后,游戏页面将把意图移动到得分页面,当从得分页面按下后退按钮时,意图将在开始页面上传递,如下所示: 开始页面->游戏页面 游戏页面->得分页面 分数页(按下后退按钮时)->开始页 现在,当我回到起始页时,我再次按下后退按钮而不是退出应用程序,它将返回到分数页,如果我再次按下后

嗨,我在我的应用程序中做了一个修改,我想在点击后退按钮后关闭我的应用程序。这听起来可能很普通,对吧?但这正是我的应用程序所发生的。我有3个屏幕:开始页面、游戏页面和得分页面。从开始页面按下开始按钮后,将开始游戏页面。游戏结束后,游戏页面将把意图移动到得分页面,当从得分页面按下后退按钮时,意图将在开始页面上传递,如下所示:

  • 开始页面->游戏页面
  • 游戏页面->得分页面
  • 分数页(按下后退按钮时)->开始页
  • 现在,当我回到起始页时,我再次按下后退按钮而不是退出应用程序,它将返回到分数页,如果我再次按下后退按钮,它将再次进入起始页,形成一个无休止的循环。我将此代码放在我的起始页上,但它不能解决我的问题:

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

    我是否需要更改我的意图流程,或者有可能解决此问题?

    只需在游戏页面上添加此片段即可

    //just after your startActivity(scoreIntent)
    this.finish();
    
    这将在启动记分活动之前完成游戏活动。 现在,当您也想结束score活动时,不要使用start activity启动新的intent,而只需结束您的score活动(这意味着,将backpressed回调保留为默认值)

    这是因为如果您在游戏活动的自然结束时关闭游戏活动,则堆栈中第二个最上面的活动将是开始活动。这允许您仅结束最上面的活动(得分活动)以检索开始页


    注意:此解决方案仅适用于您当前的工作流。如果您添加另一个页面(例如开始游戏gameover分数),则需要在每个非外部活动中复制此行为(在上一个示例中,在游戏和gameover页面中)

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

      startActivity(intent);//intent for GamePage
      finish();
    
      startActivity(intent);//intent for Score Page
      finish();
    
    startActivity(intent);//intent for StartPage
      finish();
    
    在游戏页面中,当开始得分时,执行以下操作

      startActivity(intent);//intent for GamePage
      finish();
    
      startActivity(intent);//intent for Score Page
      finish();
    
    startActivity(intent);//intent for StartPage
      finish();
    
    在“得分”页面中,按BackButton时执行以下操作

      startActivity(intent);//intent for GamePage
      finish();
    
      startActivity(intent);//intent for Score Page
      finish();
    
    startActivity(intent);//intent for StartPage
      finish();
    

    每当你以新的意图调用新的活动时,写下

    finish();
    
    startActivity()之后

    调用新活动时,请在写入
    finish()
    后进行检查

    一个是另一个选择。 在
    清单
    文件中写入启动模式,这些活动只调用一次


    清单文件-->

    或者,当从分数页调用起始页时,您可以使用flag Intent.flag\u ACTIVITY\u CLEAR\u TOP

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

    哦,我明白了,这只是意味着我的活动不会在单击“后退”按钮后立即结束?谢谢你的回答,这是我第一次在我的活动上添加意图,这就是为什么我对它不太熟悉的原因。这将导致StartPage活动被销毁并重新创建(毫无意义)在每个应用程序循环中。如果他想从ScorePage转到StartPage,这是我的。谢谢!:)这一个救了我!谢谢,我需要避免有人通过登录活动,当我按下“后退按钮”时,它会将他们带到主(登录)活动lol。谢谢!