【发布时间】:2012-09-07 09:00:27
【问题描述】:
我有一个登录屏幕,其中包含 2 个用于用户名和密码的 EditText。 我的要求是,在方向更改时,EditText 中的输入数据(如果有)应保持原样,并且还应绘制新布局。我有 2 个布局 xml 文件-一个位于布局文件夹中,另一个位于在布局土地文件夹中。我正在尝试实现以下两种方法,但它们都不是完美的:
(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()。
所以我处于一个非常可怕的境地。这个问题有什么解决办法吗?请帮忙。提前谢谢。
【问题讨论】:
-
@Doomsknight:你能详细说明一下吗?
-
这里有一些好的想法/例子stackoverflow.com/questions/5179686/… 特别是 Eric Nordvik 的回答,如果其他人不起作用
-
@VijayC :我仍在尝试所有方法。完成后我会立即通知。
标签: android android-layout android-edittext orientation