【问题标题】:Create activity stack branch and clear it创建活动堆栈分支并清除它
【发布时间】:2011-09-12 23:53:21
【问题描述】:

我知道类似的问题已经被问过很多次了,但我的有点不同。 例如,我有活动树,如 A(根活动)-B-C-D-E(A 启动 B,B 启动 C 等)。我还有两个可以启动活动 F 和 G 的按钮,它们随处可用(它们就像菜单和它们的 launchMode="singleTask")

如果从 B C D 或 E 调用“特殊”活动之一,则弹出窗口会显示“您真的要破坏预订过程吗?”之类的文本。如果用户单击“是”,则活动更改为“G”,B C D 和 E 活动应从活动堆栈中清除并再次按“后退按钮”将用户返回到活动 A(或 F,如果从 F 调用 G)。

我可以通过设置标志“Intent.FLAG_ACTIVITY_CLEAR_TOP”来做到这一点,但这不合适,因为我需要以某种方式确定是否从 B/C/D/E 活动之一调用了 G 活动。如果不是(我的意思是它是从 A 或 F 活动调用的),那么后退按钮应该像往常一样工作。

我已经尝试过: 通过清单文件广播接收者 - 我试图从另一个 B C D E 活动中调用“finish()”。这有点愚蠢,因为其中一个可能已经被 GC 删除了。

“getCallingActivity()”方法。无法让它工作。想比较调用活动是否是 B/C/D/E 之一

“startActivityForResult(intent,result)” - 它不起作用(onActivityResult 未被调用),因为我的清单文件中有 F 和 G 活动的“launchMode="singleTask”。

我也尝试为 B-C-D-E 树创建一个新任务。但意识到它甚至作为启动菜单中的第二个任务出现。

我将非常感谢任何帮助,即使是理论上的帮助。

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    我不确定 onResultReceived 可能是什么,但请尝试:

    @Override
        protected void onActivityResult(int requestCode, int resultCode, 
                Intent intent){
    super.onActivityResult(requestCode, resultCode, intent);
    
    ...etc...
    
    }
    

    只需使用intent.putExtra()... 从一项活动获取信息到另一项活动。如果您希望它回传,请在“最顶层”活动中使用this.setResult(int, intent),它会反击。如果您希望它一直触发到开头,也有一个标志,FLAG_ACTIVITY_FORWARD_RESULT。我认为这可以避免必须捕获结果然后再次将其转发到下一个最低活动,但可能是错误的。

    【讨论】:

    • 对不起!我的记忆欺骗了我。通过说“onResultReceived”,我的意思是“OnActivityResult”。当要发送结果的 Activity 使用“launchMode=singleTask”或“singleInstance”时,不会调用此方法。所以你的解决方案是行不通的。
    【解决方案2】:

    我已经通过使用 putExtra() 解决了这个问题。我将字符串从 B、C、D、E 传递给活动 F 和 G。 当 F 和 G 被对方叫到 A 时,我什么都没通过。

    通过覆盖 F 和 G 活动中的一种方法,我获得了所需的结果:

        @Override
    public void onBackPressed() {
        if (passedString != null) {
            final Intent a = new Intent(this, A.class);
            a.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(a);
        }
        super.onBackPressed();
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 2011-10-27
      • 1970-01-01
      • 1970-01-01
      • 2013-09-08
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多