Yog*_*ani 29 android orientation android-layout android-edittext
我有一个登录屏幕,其中包含2个用于用户名和密码的EditTexts.我的要求是,在方向更改时,EditText中的输入数据(如果有)应保持原样,并且还应绘制新布局.我有2个布局xml文件 - 一个在布局文件夹中,另一个在layout-land文件夹中.我正在尝试实现以下两种方法,但它们都不是完美的:
(1)configChanges:keyboardHidden -在这种方法中,我没有在清单文件中的configChanges中提供"orientation".所以我在onCreate()和onConfigurationChanged()方法中都调用了setContentView()方法.它符合我的要求.布局已更改,EditTexts中的输入数据也保持不变.但它有一个很大的问题:
当用户单击"登录"按钮时,将显示ProgressDialog,直到收到服务器响应.现在,如果用户在ProgressDialog运行时旋转设备,则应用程序崩溃.它显示一个异常,说"视图无法附加到窗口".我试图使用onSaveInstanceState处理它(它会在方向更改时被调用)但应用程序仍然崩溃.
(2)configChanges:orientation | keyboardHidden -在这种方法中,我在清单中提供"方向".所以现在我有两个场景:
(a)如果我在onCreate()和onConfigurationChanged()中调用setContentView()方法,则相应地更改Layout,但EditText数据会丢失.
(b)如果我在onCreate()中调用setContentView()方法,而不是onConfigurationChanged(),则EditText数据不会丢失,但布局也不会相应地更改.
在这种方法中,甚至没有调用onSaveInstanceState().
所以我处在一个非常令人生畏的境地.有没有解决这个问题的方法?请帮忙.Thanx提前.
Yal*_* T. 81
默认情况下,Edittext在更改方向时保存自己的实例.
确保2个Edittexts具有唯一ID,并且在两个布局中具有相同的ID.
这样,他们的状态应该被保存,你可以让Android处理方向的变化.
如果您正在使用片段,请确保它还具有唯一ID,并且在重新创建活动时不会重新创建它.
kar*_*arn 33
更好的方法是让android处理方向更改.Android将自动从正确的文件夹中获取布局并将其显示在屏幕上.您需要做的就是在onSaveInsanceState()方法中保存编辑文本的输入值,并使用这些保存的值初始化onCreate()方法中的编辑文本.
以下是如何实现这一目标:
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.login_screen);
...
...
String userName, password;
if(savedInstanceState!=null)
{
userName = savedInstanceState.getString("user_name");
password= savedInstanceState.getString("password");
}
if(userName != null)
userNameEdtTxt.setText(userName);
if(password != null)
passEdtTxt.setText(password);
}
Run Code Online (Sandbox Code Playgroud)
>
@Override
protected void onSaveInstanceState (Bundle outState)
{
outState.putString("user_name", userNameEdtTxt.getText().toString());
outState.putString("password", passEdtTxt.getText().toString());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
33957 次 |
| 最近记录: |