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

时间:2019-07-13 08:58:40

标签: java android

我们需要这样做,以禁止用户输入空值作为文件名。除非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 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

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


根据您的评论进行编辑:

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

这将是您的对话框类(或类似的东西,仅是示例):

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();

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

答案 1 :(得分:1)

您需要在输入元素的编辑文本中添加一个侦听器

   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);
            }

        }
    });

在文本更改方法上,检查长度是否大于零,然后在其中分配button属性

答案 2 :(得分:1)

Add a TextChangedListener到编辑文本。通过用户输入启用或禁用按钮。

您可以使用dialog.getButton(AlertDialog.BUTTON1).setEnabled(false);

访问肯定按钮