Java 从android中的当前活动中删除以前的活动

Java 从android中的当前活动中删除以前的活动,java,android,android-activity,Java,Android,Android Activity,我有一大堆的活动,比如a->B->C->D。。。在所有活动上启用“后退”功能。现在,关于活动D的具体行动,我想转到活动B,即D&C现在完成,活动B恢复。如何实现这种转换?尝试在D活动的某个动作中添加此代码 C close = new C(); close.finish(); D.this.finish(); 并在清单文件的活动标记中添加此属性 android:launchmode="singleTop" //Or singleTask 因此,您可以关闭c和D活动并恢复到B。为了澄清,请

我有一大堆的活动,比如a->B->C->D。。。在所有活动上启用“后退”功能。现在,关于活动D的具体行动,我想转到活动B,即D&C现在完成,活动B恢复。如何实现这种转换?

尝试在
D
活动的某个动作中添加此代码

 C close = new C();
 close.finish();
 D.this.finish();
并在清单文件的活动标记中添加此属性

android:launchmode="singleTop" //Or singleTask

因此,您可以关闭c和D活动并恢复到B。

为了澄清,请使用此API<11:

    Intent intent= new Intent(this, Login2.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(Intent);
在API级别11中,仅为此添加了一个新的Intent标志:Intent.Flag\u ACTIVITY\u CLEAR\u TASK

    Intent intent= new Intent(this, Login2.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY);
    startActivity(Intent);

从活动D调用活动B,并在意图中使用适当的标志。Intent.FLAG\u ACTIVITY\u CLEAR\u TOP应该这样做

示例代码:

Intent intent = new Intent(this, B.class)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(intent);
finish();

如果您想遵循正确和理想的流程,请选择“onActivityResult”方法。假设在您的示例中,当B转到C时,它将使用startActivityForResult启动活动C,当C转到D时,C将再次使用StatectivityForresult转到D

对于你的情况

public class B extends Activity
{
   public static int RESULT_CODE=111;

   public void onCreate(Bundle SavedInstance)
   {
   ...
   ....
   Intent intent = new Intent(B.this,C.class);
   startActivityForResult(intent,REQUEST_CODE);
   }


   public void onActivityResult(int requestCode,int resultCode,Intent data)
   super.onActivityResult(requestCode, resultCode, data);
   if(requestcode == C.RESULT_OK)
       {

       //do you work when D is finished and comes back to B
        }

    }


public class C extends Activity
{
     public static int RESULT_CODE=222;

     public void onCreate(Bundle SavedInstance)
     {
     ...
     ....
     Intent intent = new Intent(C.this,D.class);
     startActivityForResult(intent,REQUEST_CODE);
     }


    public void onActivityResult(int requestCode,int resultCode,Intent data)
    super.onActivityResult(requestCode, resultCode, data);
    if(requestcode == D.RESULT_OK)
    {
    setResult(RESULT_OK);
    }

   } 


    public class D extends Activity
    {
      public static int RESULT_CODE=333;

      public void onCreate(Bundle SavedInstance)
      {
      ...
      ....

      }


      //your back click function

      public void onBackClick(View v)
      {
      setResult(RESULT_OK);
   }

Intent Intent=新的Intent(本,B类);Intent.addFlags(Intent.FLAG_活动_清除_顶部| Intent.FLAG_活动_新任务);Intent.addFlags(Intent.FLAG\u活动\u否\u历史记录);星触觉(意向)完成();是我干的。。但第一个活动A将闪烁,而第二个活动B将显示。。就像我可以窥视堆栈,直到我的活动加载它,而不需要finish()调用。谢谢tilak。但这不会创建一个新的活动C实例并杀死它吗?谢谢@Mrugesh。这个特定的解决方案以最合适的方式解决了上述问题,我想这应该是对上一个活动执行操作以响应下一个活动的操作的最首选方式。