我希望能够控制用户可以按后退按钮的活动,具体取决于用户当前的位置。例如,我有活动A,B,C和D.
用户(通过我提供的按钮)从活动A导航到B,再导航到C,最后导航到D.如果用户在D之前的任何时间按下,我想要正常的后退操作(如果他们按下活动C,他们将与B)一起呈现。
但是,如果他们一直到D,我想完成B和C的活动。现在,当用户点击回来时,我希望它们被呈现为A.
答案 0 :(得分:3)
这可以通过拦截后退按钮按键事件并提供您自己的处理代码轻松完成。
因此,在您的活动D中,您将拥有以下代码:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
// finish activties, change parents, whatever
return true;
}
return super.onKeyDown(keyCode, event);
}
编辑(由于误解):
您可以在Bundle中将对先前活动的Context的引用作为额外内容传递给您用于启动新活动的Intent。我相信Context是Parcelable,所以你应该是好的。顺便说一句,您需要这些活动的上下文,以便您可以执行ActivityOneCOntext.finish ();
。
[[已编辑,未正常工作]]
但是,您应该小心这些引用,因为每个对Activity的Context的活动引用都会阻止垃圾收集器释放为该Activity分配的资源。如果你的Activity完成了,你仍然在另一个Activity中的某个地方保留了一个引用,你就会有一种(某种)内存泄漏。
EDIT2:
显然上面的代码无效。
您可以使用此方法获取对当前Activity的父级上下文的引用:
Context parentContext = (Context) this.getParent ();
所以,可以说,你可以像这样拥有一个祖父母的背景:
Context gParentContext = (Context) ((this.getParent ()).getParent ());
您可以看到参考hare。