【问题标题】:How to disable button of a dialog in Android?如何在Android中禁用对话框按钮?
【发布时间】:2020-07-09 22:58:59
【问题描述】:

我有一个自定义对话框,如果特定的 EditText 为空,我想禁用 PositiveButton。我在对话框中找不到如何执行此操作。
这是我的代码:

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.layout_add_apero, null);

        builder.setView(view)
                .setTitle("Super un nouvel apéro !")
                .setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                })
                .setPositiveButton("Ajouter", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        String titre_apero = editTextApero.getText().toString();
                        String date_apero = editTextDate.getText().toString();
                        listener.applyTexts(titre_apero, date_apero);
                    }
                });

        editTextApero = view.findViewById(R.id.edit_apero);
        editTextDate = view.findViewById(R.id.edit_date);

        return builder.create();
    }

因此,如果editTextAperoeditTextDate 字段为空,我想禁用PositiveButton 或弹出一个弹出窗口(但这将是对话框上的弹出窗口,也是一种弹出窗口- up) 表示用户必须填写每个字段。

【问题讨论】:

标签: java android android-alertdialog android-dialog


【解决方案1】:

仅当您的条件为真时才拆分构建器表达式并添加肯定按钮。

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

if(editTextApero.getText().length() != 0) {
      builder.setPositiveButton("Ajouter", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    String titre_apero = editTextApero.getText().toString();
                    String date_apero = editTextDate.getText().toString();
                    listener.applyTexts(titre_apero, date_apero);
                }
       });
    }

编辑我认为这是一种可能的方式:

将禁用按钮设置为启动:

((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);

然后为 EditText 设置一个文本更改监听器:

editTextApero.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) {

        if (TextUtils.isEmpty(s)) {
            ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
        } else {
            ((AlertDialog) dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(true);
        }
    }
});

如果你想让它不可见,请改用:

((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setVisibility(View.INVISIBLE);

然后退后

((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setVisibility(View.VISIBLE);

【讨论】:

  • 但它不会是动态的。就像如果用户然后写它将如何设置它?
  • 是什么触发了要创建的对话框? onCreateDialog() 在你想显示对话框的时候被调用,对吧?
  • 我明白了,抱歉我误会了。如果 EditText 有文本,如果你在 onClick() 中签入,如果没有,显示 toast 怎么办?
  • 我会做那个解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 2011-04-08
  • 1970-01-01
  • 2013-06-18
  • 1970-01-01
相关资源
最近更新 更多