0

请看图:http: //i.imgur.com/6FiGe.png

我的应用程序架构遇到了一些问题。我有一些活动/状态,如果您到达它们,则不允许返回。这些是KAX,所以当你到达它们并按下返回按钮时,你将关闭我的应用程序。

使用START Activity非常容易。一旦我做一些工作来决定我是去K还是A,我只需运行START .finish() 这就是我想要的(在KA Activity 中并按下后退按钮会关闭应用程序,因为START Activity 不再存在)。

问题从X状态开始。该应用程序就像您需要完成 3 个步骤,以便您完成:

[开始]->[ A <-> B <-> C ]->[ X ]

要求是在按下返回按钮时:

A上:关闭应用程序

B上:显示 A

C上:显示 B

如果您最终完成某种向导(A -> B -> C),您将到达X,如果您只按下后退按钮,您将关闭应用程序。

问题:我应该如何完成()A,B,C以防止X返回按钮?我没有参考使用。

4

3 回答 3

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 的类,它带有一个名为 finished 的静态(可以在类上调用静态,而无需实例化对象)布尔变量,该变量最初设置为 false,如下所示。在我自己的应用程序中,我经常使用 Globals 类来共享整个应用程序共有的东西。您还可以使用共享首选项来做类似的事情。

public class Globals
{
  public static finished = false;
}

然后在所有活动的 onResume(或者可能是 onStart)生命周期方法中,您可以放置​​以下内容

if (Globals.finished == true)
    finish();

这将导致所有活动立即关闭,但只有在全局变量中的完成变量为真时才关闭。我以前做过这个,它工作得很好,将确保活动在关闭时调用它们的生命周期方法。

甚至比这更简单,您可以通过在 ActivityX 的 onClose 方法中设置 Globals.finished = true 来避免使用后退按钮事件处理程序。

于 2012-04-22T00:40:34.237 回答
1

您需要finish()在要完成的活动中一路回调。使用startActivityForResult帮助您完成后退过程

于 2012-04-21T23:57:23.723 回答
0

你可以参考这个链接

您可以在活动 A、B、C 的清单文件中添加 android:noHistory="true" ,即...

清单的示例代码看起来像

<activity android:label="string resource" android:name="activityA" android:noHistory="true" />
于 2012-04-22T02:51:07.400 回答