旋转屏幕时关闭警报对话框

时间:2018-02-21 14:29:38

标签: android

在Android应用程序中我有一个警告对话框,在旋转屏幕时它被解雇了,我发现堆栈溢出的许多解决方案与此类似,但不适用于我的问题......

这是我的警报对话编码...

private void callchangepswd() {

        AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
        alertDialog.setCancelable(true);
        View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.changepassword, null, false);

        EditText cemail = (EditText) view.findViewById(R.id.chagepswd_mail);
        EditText cphone = (EditText) view.findViewById(R.id.chagepswd_phone);
        Button verify=(Button)view.findViewById(R.id.verifybtn);

        alertDialog.setView(view);
        final AlertDialog dialogShow = alertDialog.create();
        dialogShow.show();

        verify.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogShow.dismiss();
                newpassword();
            }
        });

    }

任何人都可以帮助从这个出来......

3 个答案:

答案 0 :(得分:1)

旋转屏幕时,Activity将被销毁并重新创建。这就是你Dialog消失的原因。

为了处理这种情况,您可以覆盖onSaveInstanceState,在捆绑中保留boolean,告诉您对话框是否显示。您还应该保留用户输入(电话和电子邮件)。

并且onRestoreInstanceState您需要重新创建对话框并使用用户输入填充字段。您可以阅读有关活动生命周期here

的更多信息

答案 1 :(得分:0)

您必须使用DialogFragment而不是AlertDialog,如https://developer.android.com/guide/topics/ui/dialogs.html中所述,DialogFragment将在方向更改期间存活

答案 2 :(得分:0)

无需使用SaveInstanceState。您可以在设备轮换后通过将orientation|screenSize添加到android:configChanges activity的{​​{1}}属性来保存您的活动状态(包括对话框)

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

正如@greenapps在评论中正确指出的那样,您应该将android:configChanges="orientation|screenSize"添加到您调用对话框的每个活动中。