问题
When my stack is in this situation:
A->B->C
if I start D activity, I want that the activity stack becomes:
A->D
Note that activity C is a dialog.
回答1:
here are the steps which will do the needed:
- from activity C launch the activity A with a boolean
fromActivityCbundled with the intent and the flagFLAG_ACTIVITY_CLEAR_TOPset . Now in the on create of the activity A check for this boolean "fromActivityC" first and if present launch the activity D else the normal flow continues.
// following code can be used to get the boolean in the oncreate boolean entrypoint=this.getIntent().getExtras().getBoolean("fromActivityC");
A lil workaround but Hope it helps
回答2:
There is several way to remove a activity from the stack or prevent it to be stacked :
To remove your activity from the stack , simply call finish(), see here.
You can also implement in your manifest the property : android:noHistory="true" which prevent an activity to be stacked.
See this question form more detail : Removing an activity from the history stack
回答3:
A little hacky, but you could start activity A while clearing the stack, then start activity D.
Activity A might appear for a moment before disappearing though
回答4:
You could try finishing ActivityB when you launch ActivityC and the same in ActivityC when launching A.
Your code would look like this:
Intent i = new Intent(this.class.ActivityC);
startActivity(i);
ActivityB.finish();
回答5:
on callback of C , pass a message back to A and start your D from Acall finish , this will finish B and C (because C is apart of B).
回答6:
here is a better solution not depending on evaluating the Intent content in A:
use the flag FLAG_ACTIVITY_TASK_ON_HOME
you should also take a look at the other flags Android Intent
来源:https://stackoverflow.com/questions/6369918/how-to-manage-activity-stack