单击按钮后关闭活动堆栈

Sid*_*ele 10 android android-activity

在我的应用程序中,我从登录页面启动了一个八步"向导",其中数据从步骤1一直传递到步骤8.为了保持数据完好无损,同时仍处于步骤之间,我没有调用finish()任何一项活动.但是,当所有步骤都完成后,有没有办法可以关闭我开始的所有8个活动并返回到登录页面?

这里有各种各样的例子:

首页 - 步骤1 - > 2 - > 3 - > 4 - > 5 - > 6 - > 7 - > 8

此时,当用户单击"保存"时,关闭所有步骤(8)并返回主页.到目前为止,我一直在创建一个新的意图,但我意识到这不是最好的解决方案.简单的背压将他带回第7步.

任何帮助赞赏.

Var*_*run 20

Intent intent = new Intent(this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

这将从第8个屏幕中删除之间的所有活动并启动你的同屏幕.你也可以在manifest launchmode ="singleTop"中设置你的主屏幕的活动.看到这个链接 - developer.android.com/guide/topics/fundamentals.html#acttask


Dar*_*ell 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();
}
Run Code Online (Sandbox Code Playgroud)

这为您提供了更多控制,并允许原始活动通过onActivityResult而不是创建意图接收结果,如果原始请求具有您想要保留的其他状态(特别是在其开始意图中),则可能更直观.