Android条件に基づいて)で開始アクティビティを動的に変更する方法はありますか?私が試みた(動作しなかった)は次のとおりです。
。
if (condition) {
startActivity(new Intent(this, MenuActivity.class));
} else {
startActivity(new Intent(this, LoginActivity.class));
}
Activity
の状態をチェックし、次のonCreate
を起動し、それ自体でfinish()
を呼び出すUIのない初期Activity
がないのはなぜですか? 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
は、コードをより人間が読めるようにする必要がある場合に最適です。