ユーザー名とパスワードの2つのEditTextで構成されるログイン画面があります。私の要件は、向きを変更するときに、EditTextの入力データ(存在する場合)をそのままにして、新しいレイアウトも描画することです。2つのレイアウトxmlファイルがあります。1つはlayoutフォルダーに、もう1つはlayout-landフォルダーにあります。私は次の2つのアプローチを実装しようとしていますが、どれも完璧ではありません。
(1)configChanges:keyboardHidden-このアプローチでは、マニフェストファイルのconfigChangesに「方向」を指定しません。そのため、onCreate()メソッドとonConfigurationChanged()メソッドの両方でsetContentView()メソッドを呼び出します。それは私の両方の要件を満たしています。レイアウトが変更され、EditTextsの入力データもそのまま残ります。しかし、それは大きな問題を抱えています:
ユーザーが[ログイン]ボタンをクリックすると、サーバー応答が受信されるまでProgressDialogが表示されます。これで、ProgressDialogの実行中にユーザーがデバイスを回転させると、アプリがクラッシュします。「ビューをウィンドウにアタッチできません」という例外が表示されます。onSaveInstanceState(向きの変更時に呼び出されます)を使用して処理しようとしましたが、アプリがクラッシュします。
(2)configChanges:orientation |keyboardHidden-このアプローチでは、マニフェストに「orientation」を提供します。だから今私は2つのシナリオがあります:
(a) onCreate()とonConfigurationChanged()の両方でsetContentView()メソッドを呼び出すと、それに応じてレイアウトが変更されますが、EditTextデータは失われます。
(b) onCreate()でsetContentView()メソッドを呼び出したが、onConfigurationChanged()では呼び出さなかった場合、EditTextデータは失われませんが、それに応じてレイアウトも変更されません。
そして、このアプローチでは、onSaveInstanceState()は呼び出されません。
ですから、私は本当に恐ろしい状況にあります。この問題の解決策はありますか?助けてください。よろしくお願いします。