Java 使用startActivityForResult()然后使用finish()
我的android应用程序中有一个视图需要打开另一个视图 并关闭\完成使其打开的所有调用层次结构 我该怎么做 如果我使用这段代码,finish()永远不会被调用noJava 使用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
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的设备上不起作用。