在我的应用程序中,我从登录页面启动了一个八步“向导”,其中数据从步骤1一直传递到步骤8.为了保持数据完好无损,同时仍处于步骤之间,我不是在调用完成()任何一项活动。但是,当所有步骤都完成后,有没有办法可以关闭我开始的所有8个活动并返回到登录页面?
这里有各种各样的例子:
主页 - 第1步 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - > 8
此时,当用户单击“保存”时,关闭所有步骤(8)并返回主页。到目前为止,我一直在创建一个新的意图,但我意识到这不是最好的解决方案。一个简单的背压让他回到了第7步。
任何帮助表示感谢。
答案 0 :(得分:20)
Intent intent = new Intent(this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
这将从第8个屏幕中删除之间的所有活动并启动你的同屏幕。你也可以在manifest launchmode =“singleTop”中设置你的主屏幕的活动。请参阅此链接 - developer.android.com/guide/topics/fundamentals.html#acttask
答案 1 :(得分:5)
另一种方法是使用StartActivityForResult(...)来启动每个活动,并让活动在finish()之前调用setResult()。然后在每个Activity的onActivityResult(...)方法中,如果intent为非null,则调用finish()。
这将创建完整的堆栈,并在最后完成时自动完成所有堆栈。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {
return; // back button, resume this activity
}
// Propagate result down the stack.
setResult(0, data);
finish();
}
这为您提供了更多控制,让原始活动通过onActivityResult而不是创建意图接收结果,如果原始请求具有您想要保留的其他状态(特别是在其开始意图中,则可能更直观) )。