当前位置: 首页 > 知识库问答 >
问题:

除非输入字段不为空,否则禁用AlertDialog上的保存按钮

邵兴庆
2023-03-14

我们需要这样做是为了禁止用户输入空值作为文件名。除非userInput不为null,否则应禁用“保存”按钮。

以下是当前代码:

public void openDialog() {
    @SuppressLint("InflateParams") View view = (LayoutInflater.from(AudioRecorder.this)).inflate(R.layout.audio_name_input, null);

    AlertDialog.Builder alertBuilder = new AlertDialog.Builder(AudioRecorder.this);
    alertBuilder.setView(view);
    final EditText userInput = view.findViewById(R.id.userInput);

    alertBuilder.setCancelable(true);
    alertBuilder.setPositiveButton("Save", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            inputName = String.valueOf(userInput.getText());
            Toast.makeText(AudioRecorder.this, "Next audio clip will be named... " + inputName, Toast.LENGTH_SHORT).show();
            filePathMaking();
        }
    });
    alertBuilder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });

    Dialog dialog = alertBuilder.create();
    dialog.show();
}

共有3个答案

徐欣德
2023-03-14

向编辑文本添加TextChangedListener。通过用户输入使按钮启用或禁用。

您可以以dialog.get按钮(AlertDialog.设置启用(false);

濮俭
2023-03-14

您可以这样做:

if(input != null){
    button.setEnabled(true); //you can  click your button now
}else{
    button.setEnabled(false); //you can not click your button
}

下面是通用自定义对话框的示例:

这将是您的dialog类(或类似的类,它只是一个示例):

public class FullSizeImageDialog extends Dialog {
private ImageView imageView;
private ProgressBar fullImageProgreesBar;
private Context dialogContext;

public FullSizeImageDialog(@NonNull Context context) {
    super(context);
    setContentView(R.layout.full_size_image_dialog);
    dialogContext = context;
    imageView = findViewById(R.id.full_size_image);
    fullImageProgreesBar = findViewById(R.id.fullImageProgreesBar);
    }
}

这是对话框的布局(R.id.full_size_image):

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
   android:background="#66F9B639">


 <!--Place your views here-->


 </android.support.constraint.ConstraintLayout>

当你想显示你的对话框时,这是非常容易的:

FullSizeImageDialog dialog = new FullSizeImageDialog ();
dialog.show();

现在,您可以将逻辑放在自定义对话框类中。

公西俊才
2023-03-14

你需要添加一个监听器到输入元素编辑文本

   AlertDialog.Builder builder = new AlertDialog.Builder(AudioRecorder.this);
    builder.setIcon(android.R.drawable.ic_dialog_info);
    builder.setTitle("Record Sound");
    builder.setMessage("Enter Username");
    builder.setPositiveButton("PositiveButton",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    // DO TASK
                }
            });
    builder.setNegativeButton("NegativeButton",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface arg0, int arg1) {
                    // DO TASK
                }
            });

    // Set `EditText` to `dialog`. You can add `EditText` from `xml` too.
    final EditText userInput = new EditText(AudioRecorder.this);

    LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.MATCH_PARENT
    );
    input.setLayoutParams(lp);


    builder.setView(input);

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

    // Initially disable the button
    ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

    // OR you can use here setOnShowListener to disable button at first time.

    // Now set the textchange listener for edittext
    input.addTextChangedListener(new TextWatcher() {

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

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
        }

        @Override
        public void afterTextChanged(Editable s) {

            // Check if edittext is empty
            if (TextUtils.isEmpty(s)) {
                // Disable ok button
                ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

            } else {
                // Something into edit text. Enable the button.
                ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
            }

        }
    });

在文本更改的方法上,检查长度是否大于零,并在那里分配按钮属性

 类似资料:
  • 问题内容: 如果字段不正确,我想防止用户单击“注册”按钮。部分原因是必须填写某些字段。但条件开始变得有点长: 我该如何简化呢? 问题答案: 我认为您需要为表单内的输入字段提供属性,因此在表单中填写字段之前将是无效的。同样,您也可以在输入中提供其他验证属性。 例:-

  • 问题内容: 我是React JavaScript的新手。我试图在输入字段为空时禁用按钮。React的最佳方法是什么? 我正在执行以下操作: 这样对吗? 这不仅仅是动态属性的复制,因为我也很好奇要从一个元素到另一个元素传输/检查数据。 问题答案: 您需要将输入的当前值保持在状态中(或通过回调函数或sideways或 _< 此处是您应用的状态管理解决方案>_将其值更改传递给父级,以便最终将其传递回您的

  • 问题内容: 当然,这是一个有用的功能,但是有什么方法可以禁用它吗? 例如,如果表单是单个文本字段,并且旁边已经有一个“清除”按钮,则也不需要X。在这种情况下,最好将其删除。 能做到吗?如果可以,怎么做? 问题答案: 设置框的伪元素的样式:

  • 问题内容: 我想按(不修改日期时间)将其排序(不修改日期时间),否则按(不发布日期时间)排序 问题答案: 似乎我每周在这里就此给出3条建议,也许我应该放弃并放任它:-)不,我不这么认为: __ 如果希望数据库很好地扩展,请 不要 在列计算(或子句)中使用逐行函数。你应该为你的具体情况检查性能( 测量,不要猜测 ),但是当做计算 读取 数据库通常会影响你的能力,规模(这不会不管你的通讯录数据库,但我

  • 我使用属性创建了两个EditText。 这里我使用的是硬件键盘,所以当我在textField上执行空格键事件时,焦点控制直接从editText视图转移到屏幕的其他随机视图。在普通文本字段类型中,它将其作为另一个字符,这很好。 任何人都知道如何使用空间键事件来保持对同一领域的关注。

  • 除非x后面跟了另一个x,否则我怎样才能在右边匹配任意数量的空白呢? 到目前为止,我有: 但显然,即使文本是“xx”,这仍然会捕获。我如何让这个捕获“xaldkfjda”、“x”、“x adkf”等,但不是“xxaldkfjdlk”、“xx”等中的第一个x? 编辑:最后一句的结尾应该是“…但不是前两个x在:‘xxaldkfjdlk’,‘xx’等?”简而言之,我想抓住一个“x”,但从来没有两个“x”并