防止在Android屏幕旋转时关闭对话框

我试图防止在重新启动“活动”时关闭由“警报”构建器构建的对话框。

如果我重载onConfigurationChanged方法,则可以成功完成此操作,并将布局重置为正确的方向,但是我失去了edittext的粘性文本功能。因此,在解决对话框问题时,我创建了这个edittext问题。

如果我保存了来自edittext的字符串,并在onCofiguration更改中将它们重新分配,它们似乎仍默认为初始值,而不是旋转前输入的初始值。即使我强制失效,似乎也不会更新它们。

我真的需要解决对话框问题或edittext问题。

谢谢您的帮助。


不负相思意
浏览 871回答 3
3回答

白板的微信

// Prevent dialog dismiss when orientation changesprivate 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);    }

aluckdog

如果您要更改方向的布局,我不会放在android:configChanges="orientation"清单中,因为无论如何您都是在重新创建视图。使用以下方法保存活动的当前状态(如输入的文本,显示的对话框,显示的数据等):@Overrideprotected void onSaveInstanceState(Bundle outState) {    super.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {    super.onRestoreInstanceState(savedInstanceState);}这样,活动将再次通过onCreate进行,然后调用onRestoreInstanceState方法,您可以在其中再次设置EditText值。如果要存储更复杂的对象,可以使用@Overridepublic Object onRetainNonConfigurationInstance() {}在这里,您可以存储任何对象,在onCreate中,只需调用getLastNonConfigurationInstance();即可获取该对象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android