【问题标题】:Android: phone back buttonAndroid:手机返回键
【发布时间】:2012-10-29 08:19:04
【问题描述】:

手机后退按钮让我感到困惑。这个问题被问了很多次,但我没有得到解决方案。所以按照我的要求再问一次。

我有一个主屏幕活动 它调用 3 个活动 - 每个活动又调用 2 个活动。

假设我以这种方式导航

Home > Act1 > SubAct1a > SubAct1b > Home(通过 Home 按钮)> Act2 > Home > Act3

现在在 Act3 中,当我按下手机的 BACK 按钮时,我会回到 Home。此时我的要求是当我再次按下返回按钮时,它应该退出应用程序。但是发生了什么事情是这样的

Act2 > Home > SubAct1b > SubAct1a > Act1 > Home > EXIT

因此,用户在退出应用程序之前多次按下 BACK。

按 HOME 键是一个选项,但我希望 BACK 也能正常工作。

我在 HOME 活动中有这段代码 - 但它根本不起作用

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        finish();
        System.exit(0);
    }

    return super.onKeyDown(keyCode, event);
}

它只是返回到之前的活动。

【问题讨论】:

  • 因为它刚刚完成您当前的活动。其他活动仍在运行。

标签: android


【解决方案1】:

你应该返回true,告诉系统你已经处理了这种情况,

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        finish();
        System.exit(0);
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

当您开始家庭活动时,请尝试设置清除顶部标志...

Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

【讨论】:

  • 我也试过了。但它不起作用。它总是回到它所在的最后一个活动。
  • 后退键应该是这样工作的。你能形成一个更清晰的例子来说明你想要实现的目标吗?
  • myintent1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
【解决方案2】:

尝试在你的 onCreate() 中添加它

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

【讨论】:

    【解决方案3】:

    试试这个:

    @Override
    public void onBackPressed()
    {
        Intent i=new Intent(currentclass.this,Home.class)
        startActivity(i);
        finish();
        super.onBackPressed();
    }
    

    【讨论】:

      【解决方案4】:

      当您从一个 Activity 转到另一个 Activity 时,请完成上一个 Activity。那么

      如果用户按下后退按钮并完成当前活动,那么我认为您的问题将得到解决。

      Intent intent = new Intent(currentclass.this, Act1.class)
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      startActivity(i);
      finish();
      

      最后

      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event)
      {
          if (keyCode == KeyEvent.KEYCODE_BACK) {
              finish();
          }
      
          return true;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 1970-01-01
        • 2012-04-16
        • 2019-11-13
        • 2019-10-03
        相关资源
        最近更新 更多