在Android中组织活动。状态。简单?

时间:2012-04-21 23:54:31

标签: android android-activity

请查看图表: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的后退按钮?我没有提及使用。

3 个答案:

答案 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" />