如果我理解正确,您是说您有 N 个 SAME 活动并希望回到堆栈中的某个任意起点活动?
我不完全清楚你是否提前知道你的“粘性”活动之前的所有活动都应该完成,或者这是否是在途中的某个地方确定的
我不知道当 N 个活动是重复活动时将它们从堆栈中弹出的任意方式,但是您可以自己滚动,例如(未完成的代码)
如果您提前知道 A(M) 在启动下一个活动之前将是粘性的,那么您可以告诉每个前向活动,一旦它启动新任务,它就需要通过传递一个标志来杀死自己,然后当链中的最后一个活动结束,您回到 A(M)
in A(...)
startSelf()
{
Intent I = new Intent(this,MyActivity.class);
if (bFinishSelf || bFinishForward)
I.putExtra("finishself", 1);
if (Finishelf)
finish();
startActivity(I);
in ... all A(...) onCreate( ...
Bundle b = getIntent().getExtras();
if(b !=null && extras.getInt("finishself");
bFinishSelf = true;
然后,当您开始一项新活动时,检查是否设置了 finishself 标志,如果是,则在开始新活动后调用 finish() ...
另一方面,如果 A(z) 是决定你需要返回 A(...) 的那个,那么我猜在 A(z) 中你可以告诉调用的父母他们需要自杀直到到达数据中包含的一些 ID ...
A(M) startActivityForResult(...)
A(Z) 以某种方式确定 A(M) 应该是粘性活动...
finshAndStopAt(int ID) {
Intent I = new Intent();
I.putExtra("finish",ID);
if (getParent() == null) {
setResult(Activity.RESULT_OK, I);
} else {
getParent().setResult(Activity.RESULT_OK, I);
}
finish();
}
所有 A(z ... m)(父母的)都将监控返回数据
@Override void onActivityResult(int requestCode, int resultCode, Intent data) {
// If we are asked to finish ourselves, pass it on ...
if (null != data && data.getInt("finish",stopAt) != myID) {
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
finish();
}
// else we can hang around and are the sticky activity
}
这有点痛苦,也许有人知道更简单的方法