在我的Android应用程序中假设有几个活动 如果使用意图我会去其他活动
[活动A] - > [活动B] - > [活动C] - > [活动-D] - > [活动N]
现在当按下按钮时我在活动N上然后我想去活动B 并且想要销毁活动C和活动D但活动A 不应该破坏。我也搜索了各种帖子,但我没有得到完全相同的解决方案。
o任何帮助都将被评估
答案 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
之上的所有活动。在您提供的示例中,这将完成ActivityN
,ActivityD
和ActivityC
。使用标记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