質問

条件付きに基づいてAndroidの開始アクティビティを動的に変更する方法はありますか?私がやろうとしたのは(うまくいかなかった)ことでした。

  1. AndroidManifest.xmlで定義されているランチャーカテゴリを削除します
  2. アプリが使用するカスタムアプリケーションクラスを作成します
  3. アプリケーションクラスのonCreateメソッドをオーバーライドして、次のようなコードを定義します。

.

if (condition) {
    startActivity(new Intent(this, MenuActivity.class));
} else {
    startActivity(new Intent(this, LoginActivity.class));
}
役に立ちましたか?

解決

最初のものを持ってみませんか Activity 条件をチェックするUIはありません onCreate, 、次に起動します Activity, 、次に電話します finish() それ自体?私は電話したことがありません finish() 内部から onCreate() しかし、これがうまくいくかどうかはわかりません。

編集
うまくいくようです。明確にするためのコードを次に示します。
イニシャル Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent;
    if (condition) {
       intent = new Intent(this, ClassA.class);
    } else {
       intent = new Intent(this, ClassB.class);
    }
    startActivity(intent);
    finish();
    // note we never called setContentView()
}

他の Activity:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

他のヒント

これが私が私の小さなモバイルプロジェクトの1つで個人的にしたことです。別の、画面のないものを作成する代わりに Activity 条件がどこにあり、対応する画面を起動する場所では、条件を1つに入れます Activity そしてダイナミクスをしました setContentView(), 、ように:

if (!userIsLoggedIn) {
    setContentView(R.layout.signup);
} else {
    setContentView(R.layout.homescreen);
}

このアプローチの2つの重要なメモ:

1:それを書く代わりに onCreate(), 、あなたは意思決定を中に入れたいです onResume() 正確には、後者が常に前に表示する必要があるときはいつでも後者が呼び出されるためです。 Androidからそれを見ることができます アクティビティライフサイクル. 。たとえば、ユーザーがアプリをダウンロードして初めて起動した場合、ユーザーがログインしていないため、彼女はサインアップページに導かれます。彼女がサインアップを終えたとき、何らかの理由でプレス HOME ボタン(そうではありません BACK, 、アプリを完全に終了します!)そして、アプリを再開すると、彼女が見るレイアウトはすでにホーム画面です。条件付きの内側に置いた場合 onCreate(), 、表示されていたのはサインアップ画面です。ライフサイクルに応じて、 onCreate() アプリを前面に戻すとき。

2:このソリューションは、これら2つのアクティビティの機能をマージすることで、コードの長い悪魔のブロックが生成されない場合にのみ理想的です。私が言ったように、私のプロジェクトは小さなものでした(その主な機能はバックグラウンドで発生します)ので、その単一のダイナミック Activity あまり持っていませんでした。スクリーンレス Activity コードがより人間が読みやすくする必要がある場合、間違いなく行く方法です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top