如何完成特定活动并非所有活动

时间:2016-05-16 06:54:45

标签: android android-intent

在我的Android应用程序中假设有几个活动 如果使用意图我会去其他活动

[活动A] - > [活动B] - > [活动C] - > [活动-D] - > [活动N]

现在当按下按钮时我在活动N上然后我想去活动B 并且想要销毁活动C和活动D但活动A 不应该破坏。我也搜索了各种帖子,但我没有得到完全相同的解决方案。

o任何帮助都将被评估

6 个答案:

答案 0 :(得分:9)

ActivityN中,要返回ActivityB,请使用此选项:

Intent intent = new Intent(this, ActivityB.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

使用标记CLEAR_TOP将完成堆栈中位于ActivityB之上的所有活动。在您提供的示例中,这将完成ActivityNActivityDActivityC。使用标记SINGLE_TOP将确保将控件返回到ActivityB的现有实例(即:它不会创建ActivityB的新实例。)

答案 1 :(得分:3)

在你的活动C中这样做

public static ActivityC instance = null;
public class ActivityC extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = this;
    }
}

在你的活动D中你喜欢这个

public static ActivityD instance = null;
public class ActivityD extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        instance = this;
    }
}

最后在你的活动N.做这样的事情

public class ActivityN extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button yourButton= (Button) findViewById(R.id.yourButton);
         yourButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ActivityC.instance.finish();
                Activityd.instance.finish();
                finish();  
            }
        });
    }
}

答案 2 :(得分:2)

这是我的方法。

Activity A开始,不要只是启动Activity B,请调用startActivityForResult()方法。对所有后续呼叫执行此操作。

现在,当您从Activity N按下按钮时,请为result设置自定义值,并为finish()调用Activity N方法。现在,您应该点击onActivityResult上的Activity D方法。现在您可以检查结果是否是按下按钮。根据您的结果,继续设置结果,然后在每个finish()上调用Activity

这应该在技术上有效。

答案 3 :(得分:1)

  

编辑:使用startActivityForResult()而不是startActivity()

所以取决于结果,您可以更改行为

比如说当你想去ActivityB时,只需在INTENT中返回一些标志。当它将在 onActivityResult()中的活动D和C中捕获时,完成它们,您将最终在 B

答案 4 :(得分:1)

试试这段代码:  //活动A

Intent i = new Intent(getApplicationContext,ActvityB.class);
startActivity(i);

//活动B

Intent i = new Intent(getApplicationContext,ActvityC.class);
startActivity(i);

//活动C

Intent i = new Intent(getApplicationContext,ActvityC.class);
startActivity(i);
finish();  
// finish here actvity which you want to finish

//尝试第二种方式:

在第一个活动中,声明一个这样的Activity对象,

public static Activity fa;
onCreate()
{
 fa = this;
}

现在在另一个Activity中使用该对象来完成这样的第一个活动,

onCreate()
{
 FirstActivity.fa.finish();
}

答案 5 :(得分:1)

Flag Intent.FLAG_ACTIVITY_CLEAR_TOP可以解决您的问题: http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP