0

从启动器活动开始,我需要一种方法来了解应用程序所处的级别(层次结构)。

例如,用户在购物应用中的图像并采用以下路径:

  1. 主要活动 ---> 2. 要购买的鞋子清单 ----> 3. 购物车 ---> 4. 结帐

所以结帐将是第 4 级。当用户只是看着要买的鞋子时,这将是第 2 级。我需要这个来报告(但我认为这信息太多了)。我只需要知道我在应用程序中的级别/部分。我如何设计一些东西来在活动生命周期中跟踪这一点?

更新:我有一个名为 level 的静态变量,我在我的应用程序中扩展了应用程序,因此我可以在每次活动开始时将其重置为 0。然后在我的活动 onstart 和 onstop 中,我正在调整级别,但我不知道这是否适用于所有场景。

  @Override
    public void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        sLevel++;
    }


    @Override
    public void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        sLevel--;
}

但它不工作。我所有的活动(至少有 50 个)都从一个名为 baseActivity 的抽象类扩展而来。在 Base Activity 中是我想主要关卡的地方。最终目标是能够跟踪用户来自哪里。我需要报告最终用户到达活动的路径

4

3 回答 3

0

我真的不喜欢你这样做的方式。

无论如何,您应该按照描述为每个屏幕创建一个活动。然后对于每个活动,你给它对应的整数值 1-4。问题解决了。

于 2014-09-28T21:44:18.297 回答
0

另一个人帮我找到了路径..假设您对所有活动都使用基类。使用下面的代码。此外,如果您确实需要将您的级别设置为 int,则只需调用 getPath() 并在分隔符“/”上拆分字符串。该数组的长度将是您的级别。

public abstract BaseActivity extends Activity {
private static final String EXTRA_PATH = "path";

private String path;

@Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState == null) {
        path = getPath();
    } else {
        path = savedInstanceState.getString(EXTRA_PATH, "");
    }
}`enter code here`

@Override protected void onSaveInstanceState(Bundle outState) {
     super.onSaveInstanceState(outState);
     outState.putString(EXTRA_PATH, path);
}

public String getPath() {
    if (path == null) {
        path = getIntent().getStringExtra(EXTRA_PATH);
        path = path == null ? "" : path += "/";
        path += this.getClass().getSimpleName();
    }
    return path;
}

    public <T extends Activity> void startActivityWithPathInfo(Class<T> activityClass) {
        Intent i = new Intent(this, activityClass);
        i.putExtra(EXTRA_PATH, getPath());
        startActivity(i);
    }
}
于 2014-10-17T18:05:24.097 回答
0

如果您的应用程序导航是线性的,您的解决方案将有效。在那种情况下报告我不明白为什么你不只是写出你在每个活动的 onResume() 回调中的活动名称。

请记住,如果您的应用程序工作流程不是线性的(A 到 B 到 C),例如 A 有 B 和 C,您的解决方案不会给您想要的结果。

于 2014-09-28T23:32:14.950 回答