【问题标题】:Android activity go back to activity that started it instead of parent activity when pressing navigation bar back button按下导航栏后退按钮时,Android活动返回启动它的活动而不是父活动
【发布时间】:2013-10-21 08:32:29
【问题描述】:

我有以下场景:

在 android manifest 我有三个活动: 活动A ActivityB - ActivityA 的父级 活动C

我想要做的是使用intent.StartActivity() 从ActivityC 启动ActivityA。活动成功启动。现在我想使用操作栏的后退按钮(左上角)返回到 ActivityC,但由于 ActivityA 将 ActivityB 作为父级(如 android 清单中声明的​​那样),操作栏后退按钮将我带到 ActivityB 而不是之前的 ActivityC。如果我使用后退键盘按钮,我会被重定向到 ActivityC。

如何在两种“导航返回”情况下获得相同的结果。我正在寻求的结果是被重定向到启动 ActivityA 的活动,而不是它的父活动。有可能吗?

【问题讨论】:

  • 你真的需要将 B 设置为 A 的父级吗?

标签: android android-intent android-activity parent back


【解决方案1】:

您不应在清单中将 ActivityB 定义为 ActivityA 的父级。相反,像这样处理 ActivityA 中的 onOptionsItemSelected:

public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
        }
    return super.onOptionsItemSelected(item);
    }

【讨论】:

  • 那么,您的意思是,如果一个活动在清单中定义了一个父活动,使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 不会“覆盖”该设置?
  • 你知道为什么Android不做switch (item.getItemId()) { case android.R.id.home: finish(); } 默认
  • 我的意思是:如果在Activity A的左上角按下并不总是将你带到Activity B,那么Activity B在逻辑上不是Activity A的父级。因此你不应该定义它作为清单中的父母。否则你会遇到像现在这样的问题。至于默认代码问题 - 并非每个活动都启用了左上角触摸功能,因此它不会是始终有用的代码。
  • 好的。感谢您的澄清。我删除了 Activity A 的父定义并处理了“android.R.id.home”的“onOptionsItemSelected()”,就像在您的代码中一样。但我面临一个奇怪的行为:通过按左上角(导航返回按钮)重新创建活动 B,而不是按手机的返回按钮(硬件返回按钮),它不会重新创建活动 B(它的布局与导航到活动 A) 之前完全一样。我也试过“return true;”在调用“finish();”之后对于“case android.R.id.home:” - 结果相同。我错过了什么吗?
  • 请将您的活动 A 和活动 B 的清单声明添加到您的问题中。我怀疑那里可能存在导致新问题的原因。
【解决方案2】:

当你调用 startActivity() 时,这样做:

Intent intent = new Intent(callingActivity.this, destinationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

【讨论】:

    【解决方案3】:

    尝试以下方法:

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

    这将模拟按下后退按钮,这将另外保留您来自的Activity 的状态(标签、滚动位置)。

    (感谢@Kise 在https://stackoverflow.com/a/31331757/2703209 中提出的建议)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多