android:对话框:有输入框时如验证错误不关闭对话框

一,代码:

        //给按钮增加点击事件
        Button button2 = findViewById(R.id.button2);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //创建对话框
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                builder.setIcon(R.drawable.ic_launcher_background)
                        .setTitle("对话框")
                        .setMessage("请输入新的用户名");
                EditText input = new EditText(MainActivity.this);
                builder.setView(input);
                
                //确定按钮 
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int id) {
                                Field field = null;

                                try {
                                    //通过反射获取dialog中的私有属性mShowing
                                    field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
                                    field.setAccessible(true);//设置该属性可以访问
                                } catch (Exception ex) {

                                }
                                //判断是否输入为空
                                String userInput = input.getText().toString();
                                if (userInput == null || "".equals(userInput)) {
                                    try {
                                        //设置dialog不可关闭
                                        field.set(dialog, false);
                                        //提示错误
                                        Toast.makeText(MainActivity.this, "输入不能为空!", Toast.LENGTH_LONG).show();
                                    } catch (Exception ex) {
                                    }

                                } else {
                                    // 处理自己的业务逻辑
                                    // 在此处处理用户输入的内容
                                    Toast.makeText(MainActivity.this, "输入信息为:"+userInput, Toast.LENGTH_LONG).show();

                                    try {
                                        //关闭对话框
                                        field.set(dialog, true);
                                        dialog.dismiss();
                                    } catch (Exception ex) {
                                    }
                                }
                            }
                        });

                //取消按钮
                builder.setNegativeButton("取消", (dialog, which) -> {
                    Field field = null;

                    try {
                        //通过反射获取dialog中的私有属性mShowing
                        field = dialog.getClass().getSuperclass().getDeclaredField("mShowing");
                        field.setAccessible(true);//设置该属性可以访问
                        //关闭对话框
                        field.set(dialog, true);
                        dialog.dismiss();
                    } catch (Exception ex) {

                    }
                });

                AlertDialog dialog = builder.create();
                dialog.show();
            }
        });

 

 

二,测试效果:

输入不合法时,对话框也没有关闭

posted @ 2025-05-10 09:02  刘宏缔的架构森林  阅读(18)  评论(0)    收藏  举报