开发者

Closing activities stack after a button click

开发者 https://www.devze.com 2023-01-28 14:34 出处:网络
In my ap开发者_运维技巧p, I start an eight step \"wizard\" from my landing page in which data is passed from step 1 all the way to step 8. For keeping the data intact while still in between steps, I a

In my ap开发者_运维技巧p, I start an eight step "wizard" from my landing page in which data is passed from step 1 all the way to step 8. For keeping the data intact while still in between steps, I am not calling finish() on either of the activities. However, when all the steps are complete, is there a way that I can close all the 8 activities I had started and return back to the landing page?

An illustration of sorts here:

Home - Step 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

At this point, when the user clicks "Save", close all the Steps (8) and go back to the Home Page. I have been creating a new intent to do this so far, but i realize this is not the best solution. A simple back press takes him back to the 7th Step.

Any help appreciated.


Intent intent = new Intent(this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

This will kill all the activities in between from your 8th screen and launch your hom screen back. also u can set ur home screen's acitivty in manifest launchmode="singleTop". see this link - developer.android.com/guide/topics/fundamentals.html#acttask


Another approach would be to use StartActivityForResult(...) to start each activity, and have activities call setResult() before finish(). Then in each Activity's onActivityResult(...) method call finish() if the intent is non-null.

This will create the full stack, and automatically chain-finish them all when the last finishes.

@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();
}

This gives you a little more control and lets the original activity receive the result via onActivityResult rather than the create intent, which might be more intuitive if the original request has other state you want to preserve (in its start intent, in particular).

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号