首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中防止屏幕旋转的对话框关闭

在Android中防止屏幕旋转的对话框关闭
EN

Stack Overflow用户
提问于 2011-09-26 23:14:18
回答 9查看 63.3K关注 0票数 97

我正在尝试防止使用Alert builder构建的对话框在活动重新启动时被清除。

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

如果我保存编辑文本中的字符串,并在onCofiguration更改中重新分配它们,它们似乎仍然默认为初始值,而不是旋转之前输入的值。即使我强制执行无效操作,似乎也会更新它们。

我真的需要解决对话框问题或编辑文本问题。

谢谢你的帮助。

EN

回答 9

Stack Overflow用户

发布于 2014-12-05 15:51:07

代码语言:javascript
复制
// 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);
}
代码语言:javascript
复制
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);
    }
票数 48
EN

Stack Overflow用户

发布于 2011-09-27 00:45:05

如果您在更改方向时更改布局,我不会将android:configChanges="orientation"放入您的清单中,因为您无论如何都会重新创建视图。

保存活动的当前状态(如输入的文本、显示的对话框、显示的数据等)使用以下方法:

代码语言:javascript
复制
@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

这样,该活动将再次通过onCreate,然后调用onRestoreInstanceState方法,您可以在该方法中再次设置EditText值。

如果你想存储更复杂的对象,你可以使用

代码语言:javascript
复制
@Override
public Object onRetainNonConfigurationInstance() {
}

在这里,您可以存储任何对象,而在onCreate中,您只需调用getLastNonConfigurationInstance();来获取对象。

票数 5
EN

Stack Overflow用户

发布于 2016-06-27 13:43:11

只需在AndroidManifest.xml中的activity元素中添加android:configChanges=“orientation

示例:

代码语言:javascript
复制
<activity
            android:name=".YourActivity"
            android:configChanges="orientation"
            android:label="@string/app_name"></activity>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7557265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档