0

Launcher アクティビティから始めて、アプリがどのレベル (階層) にあるかを知る方法が必要です。

たとえば、ユーザーがショッピング アプリにいて、次のパスをたどるイメージ:

  1. 主なアクティビティ ---> 2. 購入する靴のリスト ----> 3. ショッピング カート ---> 4. チェックアウト

したがって、チェックアウトはレベル 4 になります。ユーザーが購入する靴だけを見ている場合は、レベル 2 になります。レポートにはこれが必要です (しかし、情報が多すぎると思います)。アプリで自分がどのレベル/セクションにいるのかを知りたいだけです。アクティビティのライフサイクルでこれを追跡するために何かを設計するにはどうすればよいですか?

更新: level と呼ばれる静的変数があり、アプリで Application を拡張したので、アクティビティが開始するたびにそれを 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

別の人がパスを取得するのを手伝ってくれました..すべてのアクティビティに基本クラスを使用していると仮定します。以下のコードを使用してください。また、実際に 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 に答える
0

私はあなたのやり方が本当に好きではありません。

とにかく、説明したように、画面ごとに 1 つのアクティビティを作成する必要があります。次に、アクティビティごとに対応する整数値 1 ~ 4 を指定します。問題が解決しました。

于 2014-09-28T21:44:18.297 に答える