【问题标题】:Canceling a child activity in an Activity group when changing tabs更改选项卡时取消活动组中的子活动
【发布时间】:2012-05-15 05:16:47
【问题描述】:

(我知道 Activity Groups 和 Tabs 已被弃用。我目前无法重新设计我的应用程序,所以如果可能的话,我想用当前设计完成它。)

我有一个包含三个选项卡 A、B 和 C 的 TabActivity。选项卡 C 是一个包含两个子活动 C1 和 C2 的 ActivityGroup。 C2 总是从 C1 调用并通过设置 C1 视图并重新启动 C1 意图来解除。这一切都很好。我的问题是,如果用户在 C2 活动中选择 A 或 B 选项卡,我希望 C2 活动取消。下次选择 C ​​选项卡时,应显示 C1 活动。如果用户退出应用程序并重新进入,也是一样。

我已经实现了 OnTabChangeListener(),所以我知道何时选择了一个新选项卡,我什至可以判断 C2 选项卡是否处于活动状态(或者在选项卡更改之前)。我的问题是如何取消 C2 活动,以便在选择 C ​​选项卡时,启动默认 C1 活动,而不是返回到以前活动的 C2 选项卡。

【问题讨论】:

    标签: android android-intent tabactivity activitygroup


    【解决方案1】:

    我认为您可以为此目的使用广播发送方和接收方。在 onpause 创建一个广播接收器。我建议这样做是因为如果您也想从任何其他地方完成 c2,那么您可以通过发送广播轻松完成。使用此代码:

    BroadcastReceiver broadcast_receiver = null; // DECLARE IT IN YOUR CLASS.
    
    // WRITE BELOW CODE IN onPause OF C2 ACTIVITY.
    broadcast_receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals("finish_c2")) {
                unregisterReceiver(broadcast_receiver);
                finish();
            }
        }
    };
        registerReceiver(broadcast_receiver, new IntentFilter("finish_c2"));
    

    要完成您的活动,只需从任何地方发送广播。

    //WRITE THE BELOW CODE WHERE YOU WANT TO FINISH C2 ACTIVITY.
    Intent intent = new Intent("finish_c2");
    sendBroadcast(intent);
    

    如果出现任何问题,希望它会帮助您。

    【讨论】:

    • 这可能有效,但它似乎是一种奇怪的方式。我如何在活动组 onPause() 中调用子活动的完成?
    • 您没有在子活动中调用完成。您只在您想要完成的 C2 活动中调用完成。您仅从子活动发送广播。不用担心我在模块中测试过多次的这段代码,它运行良好。示例是 A->B->C 就像 A 开始 B 和 B 开始 C 现在您想从 C 中删除 B。如果您能够完成活动 B,那么 A 将自动在 C 下方,因为它是一个堆栈,如果您的删除 B 然后 C 自动降档。
    • 还有其他方法可以做到这一点。一个是不完成活动 B。在活动 C 中设置一个标志,然后在活动 B 的 onActivityResult 中接收你的标志,如果标志为真,则完成活动 B。这样活动 B 将在那里,但活动的完成将如此迅速没有人能够知道是否存在任何活动B......所以不同的方式选择合适的......
    • 随时可以 :) 但请通知我它是否适合您的情况。
    • 我实际上并没有尝试过这个,因为 Andro 的解决方案有效,而且我一直倾向于这种方式。感谢您的意见,我怀疑它可能也会起作用。
    【解决方案2】:

    您只需在 Tab C 中使用您的 onPause() 并使用与从 c2 回到 c1 相同的代码覆盖它。由于onPause() 只会在您退出该特定选项卡时被调用,因此您的活动组将在后台恢复,当您返回该选项卡 C 时,您可以首先看到您的 C1。

    【讨论】:

    • 我想到了这个,但是我退出到c2到c1的方式是重启c1的intent和setContentView()用c1的视图。这会导致切换到新的 Tab 活动(A 或 B)时出现问题
    • 试一试..我认为这不会给您带来任何问题,除非您在该活动中使用网络过多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多