更改选项卡时取消活动组中的子活动

时间:2012-05-15 05:16:47

标签: android android-intent tabactivity activitygroup

(我知道活动组和标签已被弃用。目前我无法重新设计我的应用程序,所以我希望尽可能使用当前设计完成它。)

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

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

2 个答案:

答案 0 :(得分:1)

我认为你可以为此目的使用广播发送者和接收者。在暂停中创建一个广播接收器。我建议这样做,因为如果你想从任何其他地方完成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);

希望它可以帮助您询问是否出现任何问题。

答案 1 :(得分:0)

只需在Tab C中使用onPause()并使用与从c2回到c1时使用的相同代码覆盖它。由于只有当您离开该特定标签时才会调用onPause(),因此您的活动组将在后台恢复,当您返回到标签C时,您可以在第一个位置看到您的C1。