0

たくさんのボタンがあるメイン メニュー アクティビティがあります。1 つのボタンで、ユーザーがフォームに入力して送信できる新しいアクティビティを開始します。ユーザーがフォームを送信すると、3 番目のアクティビティが開始されます。基本的には、コンテンツを含む画面と、メイン メニューに戻るためのボタンだけです。しかし、インテントを作成してメイン アクティビティに移動すると、setContentView() が機能せず、ボタンの割り当てによって NullPointerException が発生します。

インテント フラグを使用するか、finish() を呼び出すことで、スタックに戻る方法があることはわかっています。などのインテント フラグでは成功していませんIntent.FLAG_ACTIVITY_CLEAR_TOP。私は 1 つではなく 2 つのアクティビティから離れているため、finish() は機能しません。メインアクティビティに戻る適切な方法は何ですか?

ありがとう

4

4 に答える 4

6

これを行う方法はたくさんあります。最も簡単な方法は、次のように、インテントを起動した後に 2 番目のアクティビティで finish() を呼び出すことです。

startActivity(activity3intent);
finish();

これにより、3 番目のアクティビティが開始されると、スタックから 2 番目のアクティビティが削除されます。次に、MainMenu ボタンで 3 番目のアクティビティの終了を呼び出すだけで、最初のアクティビティに戻ります。

インテント フラグを使用したい場合は、アクティビティ 3 からアクティビティ 1 を呼び出すインテントにこれを追加してみてください。

activity1intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

これにより、アクティビティ 1 が再びフォーカスされ、スタック上でそれより上にあったものはすべてクリアされます。CLEAR_TOP フラグは残りのスタックの削除を処理しますが、スタックに既に存在する場合、IIRC はアクティビティの新しいインスタンスを開始しません。アクティビティ 1 の新しいインスタンスを開始したい場合は、フラグを使用せずに、アクティビティ 2 と 3 の両方がインテントを送信した後に finish() を呼び出して、戻るナビゲーションからアクセスできないようにします。

于 2012-06-29T17:12:36.567 に答える
0

すべてのアクティビティを含む静的クラスを作成して、それらを適切に処理できるようにすることもできます。これは非常に便利ですが、非常に非効率的ですが、何でも構いません。

于 2012-07-27T07:41:35.657 に答える
0

アクティビティ 2 で呼び出すstartActivity(yourIntent); finish()と、アクティビティ 3 が終了したときにアクティビティ 1 に戻ることができます。

于 2012-06-29T17:14:46.567 に答える
0

ユーザーがフォームに入力して送信した場合、フォームを送信するボタンのリスナーで finish() メソッドを呼び出して、アクティビティを閉じようとします。

于 2012-06-29T17:18:17.500 に答える