Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用startActivityForResult()然后使用finish()_Java_Android_Android Intent - Fatal编程技术网

Java 使用startActivityForResult()然后使用finish()

Java 使用startActivityForResult()然后使用finish(),java,android,android-intent,Java,Android,Android Intent,我的android应用程序中有一个视图需要打开另一个视图 并关闭\完成使其打开的所有调用层次结构 我该怎么做 如果我使用这段代码,finish()永远不会被调用no Intent intent = new Intent(A.this, B.class); setResult(RESULT_OK); startActivity(intent); finish(); 可以使用以下方法清除整个堆栈: intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | In

我的android应用程序中有一个视图需要打开另一个视图

并关闭\完成使其打开的所有调用层次结构

我该怎么做

如果我使用这段代码,finish()永远不会被调用no

Intent intent = new Intent(A.this, B.class);
setResult(RESULT_OK);
startActivity(intent);
finish();

可以使用以下方法清除整个堆栈:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

如果你想开始新的活动,并关闭之前打开的所有活动,这是一个解决方案。

谷歌在Android back stack上有一篇内容丰富的文章

在您的代码中,调用了
.finish()
,您的调用活动应该完成,但只完成该活动,而不完成后堆栈中的其他活动。您可以通过本文中介绍的意图标志来维护对后堆栈的一些控制,即
标志活动新任务、标志活动清除顶部、标志活动单一顶部


另一种方法是使用
startActivityForResult(…)
并在
activityresult(…)
方法中关闭不需要的活动,当它返回前台时,

将调用它。那么,您想要做的是启动子活动并完成父活动?像这样开始活动(newintent(this,UI.class)。setFlags(Intent.FLAG_activity_CLEAR_TOP | Intent.FLAG_activity_new_TASK));finish()当然会被执行finish会像@Melquiades所说的那样被正常调用。您的代码将启动一个新活动并关闭当前活动在您的情况下调用
finish()
方法。如果您不想让您的活动存储在后台堆栈中,只需在清单中的活动标记上使用
android:noHistory=“true”
,请注意
Intent.FLAG\u activity\u CLEAR\u TASK
仅在API级别11(android 3.0)中可用,因此这在运行1.x或2.x的设备上不起作用。