我有一个登录屏幕,其中包含 2 个用于用户名和密码的 EditText。我的要求是,在方向更改时,EditText 中的输入数据(如果有)应保持原样,并且还应绘制新布局。我有 2 个布局 xml 文件 - 一个在布局文件夹中,另一个在 layout-land 文件夹中。我正在尝试实现以下两种方法,但它们都不是完美的:
(1) configChanges:keyboardHidden -在这种方法中,我不在清单文件的 configChanges 中提供“方向”。所以我在 onCreate() 和 onConfigurationChanged() 方法中都调用了 setContentView() 方法。它满足我的两个要求。布局已更改,EditTexts 中的输入数据也保持原样。但它有一个大问题:
当用户单击登录按钮时,会显示一个 ProgressDialog,直到收到服务器响应。现在,如果用户在 ProgressDialog 运行时旋转设备,应用程序会崩溃。它显示一个异常说“视图不能附加到窗口”。我尝试使用 onSaveInstanceState 处理它(在方向更改时会调用它),但应用程序仍然崩溃。
(2) configChanges:orientation|keyboardHidden -在这种方法中,我在清单中提供“方向”。所以现在我有两种情况:
(a)如果我在 onCreate() 和 onConfigurationChanged() 中调用 setContentView() 方法,布局会相应更改,但 EditText 数据会丢失。
(b)如果我在 onCreate() 中调用 setContentView() 方法,但在 onConfigurationChanged() 中没有调用,则 EditText 数据不会丢失,但布局也不会相应更改。
在这种方法中,甚至不调用 onSaveInstanceState() 。
所以我处于一个非常可怕的境地。这个问题有什么解决办法吗?请帮忙。提前谢谢。