java - Android:在某些情况下禁用 AlertDialogBu​​ilder 的“确定”按钮

标签 java android android-alertdialog

所以我有一个单击按钮时会弹出的菜单。在该菜单中,用户可以输入“作业名称”(可以是字符串)和“成绩”和“可用的最大分数”(可以是数字)。 现在我想确保用户不会在任何这些 EditText 字段中输入任何内容或 null。那么有没有办法在输入有效输入之前禁用OK按钮。下面是弹出窗口的图片。

enter image description here

下面是我在 MainActivity 中的代码

Button add = (Button)findViewById(R.id.addBtn);
add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view){
            LayoutInflater li = LayoutInflater.from(context);
            View promptsView = li.inflate(R.layout.add_individual_name, null);

            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
            alertDialogBuilder.setView(promptsView);

            final EditText assignmentName = (EditText) promptsView.findViewById(R.id.enteredIndividualName);
            final EditText gradeReceived = (EditText) promptsView.findViewById(R.id.enteredUserGrade);
            final EditText maxPoints = (EditText) promptsView.findViewById(R.id.enteredMaxPoints);
            alertDialogBuilder.setCancelable(false)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            String name = assignmentName.getText().toString();
                            String grade = gradeReceived.getText().toString();
                            String totalPossible = maxPoints.getText().toString();
                            checkIfNameAlreadyExists(name);
                        }
                    })
                    .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

            final AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();

        }});

此外,如果我的数据库中已存在“分配名称”,我想禁用“确定”按钮。我有一个函数可以检查数据库中是否存在项目。

如果您想查看 AlertDialog 的 XML 代码或其他任何内容,请告诉我。

谢谢

最佳答案

您应该为 EditText 添加 TextWatcher。在 afterTextChanged 中,只需检查启用/禁用“确定”按钮的条件

// Your alert dialog config
...
final AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();

// disable the button as default start
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

// add TextWatcher for EditText
editTextAssignmentName.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void afterTextChanged(Editable s) {

        if (s.length() >= 1) { // add your condition here, in your case it is checkIfNameAlreadyExists
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
        } else {
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
        }
    }
});

关于java - Android:在某些情况下禁用 AlertDialogBu​​ilder 的“确定”按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40144854/

相关文章:

android - 布局按钮对应背景

java - 当使用 token 进行身份验证时,Spring REST API Controller 将重定向到主页

android - 如何获取appwidget的位置?

java - 以 UTF-8 格式发布 Java/Android 中的文本和文件

java - 将 AlertDialog 后面的背景设置为黑色或不透明,而不用 Dialog 替换

android - 如何自定义 Android AlertDialog 中的列表项

java - Spring Boot 应用程序执行器端点已注册且请求仍然失败

java - 无法连接到 Wildfly

java - Eclipse Luna – AutoIndent 不一致

android - 当警报对话框打开并且手机(模拟器)改变其方向时,应用程序崩溃