请查看图表:http://i.imgur.com/6FiGe.png
我的应用程序架构有些问题。我有一些活动/陈述,如果你到达他们,你不能回去。这些是 K , A 和 X ,所以当您到达它们并按后退按钮时,您将关闭我的应用。
使用 START 活动非常容易。一旦我做了一些工作来决定我是否选择 K 或 A ,我只需要运行 START .finish(),那就是我想要(在 K 或 A 活动中,按后退按钮关闭应用 START 活动不再存在。)
问题始于 X 状态。该应用程序就像您需要填写3个步骤,以便您完成:
[开始] - > [ A < - >的乙< - > C ] - > [ X
按下按钮的要求是:
A :关闭应用
B 上的:显示A
C :显示B
如果你最后完成某种向导( A - > B - > C ),你就会到达 X 如果您只按后退按钮,则会关闭应用。
问题:我应该如何完成()A,B,C来阻止X的后退按钮?我没有提及使用。
答案 0 :(得分:2)
实现此目的的一种方法是在活动X中,按下自定义事件的后退按钮。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
backPressed();
return true;
}
return super.onKeyDown(keyCode, event);
}
public void backPressed()
{
Globals.finished = true;
finish();
}
你会注意到上面的方法有一行 Globals.finished = true; 这是指一个名为Global的类,带有一个静态(可以在一个类上调用static而不必实例化一个对象)boolean变量名为finished,最初设置为false,如下所示。在我自己的应用程序中,我经常使用Globals类来分享整个应用程序的共同点。您还可以使用共享首选项来执行类似的操作。
public class Globals
{
public static finished = false;
}
然后在所有活动的onResume(或可能是onStart)生命周期方法中,您可以添加以下内容
if (Globals.finished == true)
finish();
这将导致所有活动立即关闭,但只有Globals中的finish变量为真。我以前做过这个并且效果很好,并且会确保活动在关闭时调用它们的生命周期方法。
比这更简单,你可以通过在ActivityX的onClose方法中设置Globals.finished = true来避免使用后退按钮事件处理程序。
答案 1 :(得分:1)
您需要在要完成的活动中一直调用finish()
。使用 startActivityForResult 来帮助您完成后续工作
答案 2 :(得分:0)
您可以参考此LINK。
你可以在活动A,B,C的表现文件中添加android:noHistory =“true”......
表现形式的示例代码如
<activity android:label="string resource" android:name="activityA" android:noHistory="true" />