0

ユーザーが選択した日付を示すテキスト フィールドがあります。また、ユーザーが現在の日付を変更するためのボタンを用意しました。私が直面している問題は次のとおりです。

1. Oncreate メソッドで、テキスト フィールドを現在の日付に設定しました。アクティビティが作成されると、現在の日付が表示されます。

  1. ボタンを使用して、日付を別の日付に変更します。

これはすべて正常に動作します..

しかし、デバイスを回転させると、oncreate が再び呼び出され、テキストフィールドが現在のものに変更されます。ユーザーが選択したものをテキストフィールドに保持したい。

この問題で私を助けてください。これを防ぐ方法はありますか?

4

2 に答える 2

3

画面を回転するとアクティビティが停止し、ライフサイクル全体が再開されます。これが発生すると、onCreate は引き続きアクティビティを開始した元のインテントにアクセスでき、特定のウィジェットはその状態の一部 (EditTexts など) を保持する場合がありますが、動的アクティビティ データの多くは失われます。これを防ぐには、onSaveInstanceStateメソッドの使用を検討してください。これにより、回転によって画面が消える前に、重要なデータ メンバーをバンドルに入れることができます。このバンドルは、パラメータとして onCreate に渡されます。savedInstanceState. これに関する開発ドキュメントは次のとおりです。

http://developer.android.com/reference/android/app/Activity.html#onSaveInstanceState%28android.os.Bundle%29

あなたの場合、日付の値をバンドルに追加して保存する必要があります。次に、onCreate で、savedInstanceState が null でないかどうかを確認します。これは、日付が含まれており、それに応じて処理されていることを示しています。また、後でアクティビティ ライフサイクルでこのテキストのデフォルト値を設定する場合、取得した日付が上書きされないようにしてください。

于 2012-05-22T17:09:40.250 に答える
2

ローテーションする前に変数を保存する必要があります。最良のオプションは、変数を保存する場所としてApplicationクラスを使用し、onPause()関数で実行することだと思います。

于 2012-05-22T17:00:52.813 に答える