如何在android中关闭来自父项的所有子活动

时间:2011-06-10 06:17:10

标签: android-layout android

我是android的新手。实际上,一个处理程序在Home Activity A中每30秒运行一次以检查网络连接。

如果我通过A-> B-> C进入活动C,如果当时没有网络连接,那么我想关闭活动B和C,然后想在Activity中显示消息框A.

但是我的问题是我的处理程序在Home Activity A中每30秒运行一次。但是如果我在Activity C或其他Activity中如何找到我的应用程序当前关注的活动。然后我想完成那些儿童活动,并希望显示家庭活动A我在活动B中有9个孩子活动。

我听说过使用“FLAG_ACTIVITY_CLEAR_TOP”。我在Home活动A本身的处理程序中使用了以下代码。但是得到了错误。

        Intent intent = new Intent( ctx, Homepage.class );    
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | 
             Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    ctx.startActivity( intent );

这里的Homepage.class是我的家庭活动A,我在清单文件中将该活动设置为

    android:launchMode="singleTop"    

请帮忙!

5 个答案:

答案 0 :(得分:5)

您可以启动活动A并关闭所有其他活动。 您必须创建新意图并添加标志FLAG_ACTIVITY_CLEAR_TOP


Intent activityA = new Intent(context, ActivityA.class);
activityA.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.StartActivity(activityA);

这将关闭堆栈中的所有活动,并且位于活动A的顶部

答案 1 :(得分:0)

当调用Acitivity C时,在活动B中调用finish,当从C调用Activity A时,在活动C中调用finish()!

答案 2 :(得分:0)

你可以使用,根据我的两种方式,

如果使用startActivityForResult启动活动,则可以在完成此活动时调用此活动中的finish(),它会将控制权返回给启动它的活动。

或者,否则,我可能是错的,

onStop '覆盖方法'中调用完成。

答案 3 :(得分:0)

制作统一的 resultCode 以关闭子活动。例如。你将 911 (应该是int)作为你的resultCode。如果您希望活动完成并直接返回到父活动,则将resultCode设置为911:

setResult(911); finish();

在每个子活动中,您覆盖onActivityResult并检查resultCode是否为911.如果是,则调用setResult(911); finish();,直到您返回到父活动。希望这有帮助!

答案 4 :(得分:0)

例如,如果要启动intentB,可以在旧活动中执行以下操作:

Intent intentB = new Intent();
intentB.setClass(XYZ.this, abc.class);
intentB.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intentB);