0

私の最初のアクティビティは、その onCreate 内で 2 番目のアクティビティを作成しています。

if (userName == null || password == null) {
    if (!getUserNameAndPassword() ) {
        // User is launching this for the first time
        Intent explicitIntent = new  Intent(CreateSessionAlert.this,CreateUserNameAndPassword.class);<br>
        startActivityForResult(explicitIntent,GET_USER_NAME_AND_PASSWORD);
    }
}

2 番目のアクティビティには、ユーザー名とパスワードの EditText ビューと、送信ボタンとキャンセル ボタンがあります。いずれかのボタンが押されると、ユーザー名とパスワードのテキストが (onActivityResult 経由で) アクティビティ 1 に送り返され、サーバーに接続してユーザー名が使用可能かどうかが確認されます。サーバーへの接続中に、showDialog を使用して ProgressDialog を表示します。サーバーが応答すると、ProgressDialog が閉じられ、AlertDialog が表示されます。デバイスが回転しない限り、これは正常に機能します。

ここに問題があります。ユーザーが 2 番目のアクティビティ内からデバイスをローテーションして送信をプッシュすると、最初のアクティビティがその onCreate を再度呼び出し、ユーザー名とパスワードがまだ null であるため、2 番目のアクティビティを再び起動することになります。

これを回避するための提案はありますか?

activity-2 から activity-1 の onCreate にデータを渡すために使用できるメソッドはありますか? この場合、データベースを使用したくありません。

アクティビティ 2 へのサーバー通信とダイアログを含めることを考えましたが、アクティビティ 1 とアクティビティ 2 でサーバー コードが重複することになります (アクティビティ 1 は他の目的でもサーバーに接続します)。このアプローチで発生するもう 1 つの問題は、ユーザーがパスワードの作成をキャンセルするオプションを持っていることです。その場合、アプリを終了させます。アクティビティ 2 から終了を呼び出した場合、アクティビティ 1 が表示され、ユーザー名とパスワードが作成されていない限り、アクティビティ 1 を表示したくありません。

ふと思いついたのですが、アクティビティ 2 をダイアログに置き換えることができれば、物事がより簡単になるかもしれません。ダイアログ ビューには、2 つの EditText と 2 つのボタンが必要です。このようなものを作成して showDialog メソッドを使用できますか? 他のアイデアはありますか?

4

1 に答える 1

0

追加するだけです:

<activity android:name="..."
      android:label="@string/appName"
      android:configChanges="keyboardHidden|orientation" />

マニフェストのアクティビティに。これにより、画面の回転時にアクティビティが破棄されるのを防ぐことができます。

onPause メソッドでアクティビティの状態を保存する必要があることに注意してください。ユーザーがログイン中にホームボタンを押した場合、またはログイン中に電話を受けた場合に何が起こるかをテストしてください。これにより、アクティビティがメモリから削除され、さらに問題が発生する可能性があります。

于 2010-08-13T15:48:05.080 に答える