java - Android模态对话框堆叠

标签 java android xml user-interface

我的目标是在用户导航回我的应用程序时显示模态对话框。此模态对话框要求他们提供他们定义的 6 位 PIN。我是 Java GUI 和 Android 开发的新手,所以我的问题是......

我发现,如果用户在显示回车对话框时选择最小化应用程序,如果他们返回到应用程序,对话框就会相互堆叠。让他们输入 PIN 的次数与他们在 PIN 输入期间最小化并返回到应用程序的次数一样多。

/**
 * On restart called when the app is being restarted on the screen
 */
@Override
public void onRestart() {
    super.onRestart();



    // must prompt with modal dialog for pin

    final Dialog dialog = new Dialog(this);

    dialog.setCancelable(false);

    // check pin
    dialog.setCanceledOnTouchOutside(false);
    // set view to enterpin XML screen
    dialog.setContentView(R.layout.enterpin);


    // show dialog
    if (!dialog.isShowing()) {
        dialog.show();
    }
    // listen for button being clicked
    Button button = (Button) dialog.findViewById(R.id.pinlogin);
    button.setOnClickListener(new OnClickListener() {// anonymous inner
        // class
        // implementation
        @Override
        public void onClick(View v) {
            EditText editText = (EditText) dialog
                    .findViewById(R.id.enterpintext);
            try {
                int enteredPin = Integer.parseInt(editText.getText()
                        .toString());
                SharedPreferences sharedP = Prefs.get(WebViewActivity.this);
                int temp = sharedP.getInt("pin", 0);
                if (enteredPin == temp) {
                    pinCheck = true;



                    dialog.dismiss();
                } else {
                    pinCheck = false;
                    dialog.setTitle("Incorrect Pin");
                }
            } catch (NumberFormatException e) {
                Dialog dialog2 = new Dialog(WebViewActivity.this);
                dialog2.setTitle("Enter Numbers Only");
                dialog2.setCanceledOnTouchOutside(true);
                dialog2.show();
            }
        }
    });

}

有没有什么地方可以让我移动我的 Dialog 初始化而不觉得这是糟糕的编程习惯?我明白为什么我尝试的 dialog.isShowing() 方法不起作用,因为我的 Dialog 实例仅在该方法的生命周期内存在。

我还注意到,如果您将手机从垂直方向转为水平方向 90 度,或者反过来,我的对话框就会消失。有人可以指出发生这种强制重绘时调用的方法链,以便我可以重绘对话框吗?

最佳答案

我相信您正在寻找 onResume(); + onPause(); 而不是 onRestart(); 来创建对话框.您应该使用 onRestart(); 为要显示的 PIN 对话框设置标志,而不是创建对话框。

我建议您将它移至 onCreate(); 方法,使其成为您正在处理的 Activity 的属性,并简单地将其显示在 onResume(); 中。 方法(因为每次 Activity 激活时都会调用它,即使是第一次)。

此外,当方向改变时,您需要列出您想要监听方向改变事件(通过 Activity list 中的 android:configChanges="orientation")和 onConfigurationChanged(); 方法将在具有相应数据的 Activity Activity 上调用。然后,您可以将对话框重新绘制到新的方向。

关于java - Android模态对话框堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119261/

相关文章:

java - 如何在 Android 中创建列表菜单

java - 使用 BeanUtils.copyProperties(dest, src) 时出错

java - SimpleDateFormat,需要文本月份

android - gradle导入会突然失败吗?

c# - Linq to XML 加入并添加数据?

java - mvn 目标版本无效 : 1. 7

android - 更新 Firebase Android 上的数据

javascript - 滑动检测和点击检测

java - 针对 XSD : cvc-elt. 1 的 XML 验证:找不到元素 'xxx' 的声明

android - 禁用小字符 EditText InputType