我正在尝试防止使用Alert builder构建的对话框在活动重新启动时被清除。
如果我重载了onConfigurationChanged方法,我可以成功地做到这一点,并将布局重置为正确的方向,但我失去了edittext的粘滞文本功能。因此,在解决对话框问题时,我创建了这个edittext问题。
如果我保存编辑文本中的字符串,并在onCofiguration更改中重新分配它们,它们似乎仍然默认为初始值,而不是旋转之前输入的值。即使我强制执行无效操作,似乎也会更新它们。
我真的需要解决对话框问题或编辑文本问题。
谢谢你的帮助。
发布于 2014-12-05 15:51:07
// Prevent dialog dismiss when orientation changes
private static void doKeepDialog(Dialog dialog){
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
dialog.getWindow().setAttributes(lp);
}
public static void doLogout(final Context context){
final AlertDialog dialog = new AlertDialog.Builder(context)
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle(R.string.titlelogout)
.setMessage(R.string.logoutconfirm)
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which) {
...
}
})
.setNegativeButton("No", null)
.show();
doKeepDialog(dialog);
}
发布于 2011-09-27 00:45:05
如果您在更改方向时更改布局,我不会将android:configChanges="orientation"
放入您的清单中,因为您无论如何都会重新创建视图。
保存活动的当前状态(如输入的文本、显示的对话框、显示的数据等)使用以下方法:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
这样,该活动将再次通过onCreate,然后调用onRestoreInstanceState方法,您可以在该方法中再次设置EditText值。
如果你想存储更复杂的对象,你可以使用
@Override
public Object onRetainNonConfigurationInstance() {
}
在这里,您可以存储任何对象,而在onCreate中,您只需调用getLastNonConfigurationInstance();
来获取对象。
发布于 2016-06-27 13:43:11
只需在AndroidManifest.xml中的activity元素中添加android:configChanges=“orientation
示例:
<activity
android:name=".YourActivity"
android:configChanges="orientation"
android:label="@string/app_name"></activity>
https://stackoverflow.com/questions/7557265
复制相似问题