У меня есть экран входа в систему, который состоит из 2 EditTexts для имени пользователя и пароля. Мое требование состоит в том, что при изменении ориентации входные данные (если есть) в EditText должны оставаться такими, как есть, и должен быть также нарисован новый макет. У меня есть 2 макета xml файлов - один в папке макета и другой в папке макета-земли. Я пытаюсь реализовать следующие два подхода, но ни один из них не идеален:
(1) configChanges: keyboardHidden -. В этом подходе я не предоставляю "ориентацию" в configChanges в файле манифеста. Поэтому я вызываю метод setContentView() как в методах onCreate(), так и onConfigurationChanged(). Он выполняет оба моих требования. Макет изменен, а входные данные в EditTexts также остаются такими, какие есть. Но это имеет большую проблему:
Когда пользователь нажимает кнопку "Вход", ProgressDialog показывает, что сервер-ответ получен. Теперь, если пользователь поворачивает устройство во время работы ProgressDialog, приложение отключается. Он показывает сообщение об исключении: "Вид не может быть прикреплен к окну". Я попытался обработать его, используя onSaveInstanceState (который вызывается при изменении ориентации), но приложение все еще сбой.
(2) configChanges: orientation | keyboardHidden - В этом подходе я предоставляю "ориентацию" в манифесте. Итак, теперь у меня есть 2 сценария:
(a) Если я вызываю метод setContentView() как в onCreate(), так и onConfigurationChanged(), макет изменяется соответствующим образом, но данные EditText теряются.
(b) Если я вызываю метод setContentView() в onCreate(), но не в onConfigurationChanged(), то данные EditText не теряются, но макет также не изменяется соответствующим образом.
И в этом подходе, onSaveInstanceState() даже не вызывается.
Таким образом, я нахожусь в очень запугивающей ситуации. Есть ли решение этой проблемы? Пожалуйста помоги. Thanx заранее.