【问题标题】:onCreate() called with onBackPressed but not by pressing the back buttononCreate() 用 onBackPressed 调用,但不是通过按下后退按钮
【发布时间】:2015-09-14 22:31:16
【问题描述】:

好吧,我有点困惑。我有两个活动:活动 A 和活动 B,我可以很容易地从 A 导航到 B。当我在 B 按下物理后退按钮时,Activity B 停止运行,然后我又回到了 A 停止的位置。但是,如果我改为调用 onBackPressed(),Activity B 停止运行,但 Activity A 是从头开始创建的(onCreate( ) 调用)。

我可以理解,我不能依赖 Activity A 保持活动等,但是每次按下后退按钮都有效,而 onBackPressed() 每次都失败。我假设 onBackPressed 和按下按钮做了同样的事情。

感谢所有帮助!

启动活动 B:

 Intent i = new Intent(getActivity(), MailActivity.class);
    Mail m = mMails.get(position);
    i.putExtra(MailFragment.EXTRA_MAIL, m);
    Log.d(TAG, "Mail Packed");
    startActivity(i);

试图从 B 回到 A:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.home:
            getActivity().onBackPressed();
            return false;
        default:
            return super.onOptionsItemSelected(item);
    }
}

【问题讨论】:

  • 您不应该明确调用 onBackPressed(),我很确定这不是鼓励的行为。您可能不应该这样做。您调用该 API 有什么特别的原因吗?你还有什么其他选择。
  • @JoxTraex 好吧,我尝试传递标记的意图,但无法模仿硬件后退按钮功能。按返回可以正常工作,按主页按钮然后返回应用程序工作正常(一切如预期)但返回按钮重新启动 Activity。

标签: android android-lifecycle


【解决方案1】:

就我而言,我没有在onOptionsItemSelected 中返回true。这导致父活动的onCreate() 被调用。

onOptionsItemSelected 中添加return true 后,我可以看到预期的行为。

【讨论】:

  • 这也是我的问题,似乎是对偏离预期行为的更合乎逻辑的解释。如果您return falsereturn super.onOptionsItemSelected(),则您允许应用程序执行超出您控制的额外工作,在这种情况下会导致 Activity 被销毁(无论出于何种原因)。只需return true,活动就到此为止。
【解决方案2】:

您可能想查看context.startActivity(intent); 时发送的 Intent 标志

您可以设置意图标志

intent.setFlags(FLAGS_GO_HERE | ANOTHER_FLAG_IF_YOU_WANTED);

更多详情:http://developer.android.com/guide/components/tasks-and-back-stack.html

【讨论】:

  • 将launchMode更改为singleTop,现在完美运行。我认为启动模式不是问题,因为硬件按钮功能正常,但我错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
相关资源
最近更新 更多