0

我想禁用 AlertDialog 中的确定按钮。我尝试使用下面的代码。但得到 NPE

alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setView(view);
alertDialogBuilder.setPositiveButton(android.R.string.ok, this);
alertDialogBuilder.setNegativeButton(android.R.string.cancel, this);
alertDialog = alertDialogBuilder.create();

Button positive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
positive.setEnabled(false);

按钮正面即将为空。

4

3 回答 3

0

通过这种方式设置按钮,它只显示一个按钮。

alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setView(view);
alertDialog = alertDialogBuilder.create();

    alertDialog.setButton(android.R.string.cancel,
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface dialog, int arg1) {
                            dialog.dismiss();

                        }
                    });
于 2012-10-20T15:10:27.663 回答
0

只需使用神经按钮

  final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(super.mContext);
    dialogBuilder.setTitle(
            super.mContext.getResources().getString(R.string.FAVORITE_RENAME_DIALOG_TITLE));
    dialogBuilder.setMessage(
            super.mContext.getResources().getString(R.string.FAVORITE_RENAME_DIALOG_MESSAGE));

    final EditText input = new EditText(super.mContext);

    input.setInputType(
            InputType.TYPE_TEXT_FLAG_CAP_WORDS | InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);
    input.setText(name);
    input.setSelectAllOnFocus(true);
    input.setHint(super.mContext.getResources().getString(R.string.FAVORITE_DIALOG_HINT));
    input.setFilters(
            new InputFilter[]{new DialogInputFilter(), new InputFilter.LengthFilter(20)});

    dialogBuilder.setView(input);

    dialogBuilder.setNeutralButton(
            super.mContext.getResources().getString(R.string.FAVORITE_RENAME_DIALOG_POSITIVE),
            new UpdateFavoriteListNameOnClickListener(name, favListId, input,
                    (Activity) super.mContext, this)
    );

    dialogBuilder.setNegativeButton(
            super.mContext.getResources().getString(R.string.FAVORITE_DIALOG_NEGATIVE),
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,
                        int whichButton) {

                }
            }
    );

首先在这里 Create() 然后获取 alertDialog 并获取 Button 并使用它做你想要的......我将它用于 MinLength 验证

    dialogBuilder.create();
    final AlertDialog alertDialog =  dialogBuilder.show();
    Button button = ((AlertDialog)alertDialog).getButton(AlertDialog.BUTTON_NEUTRAL);

    input.addTextChangedListener(new TextMinLengthValidator(input, button) {
        @Override
        public void validate(EditText input, Button button) {
            if (input.getText().length() < ConfigurationProvider.getConfig().getMinFavoriteNameLength() && button != null) {
                button.setEnabled(false);
                input.setError(mContext.getResources().getString(R.string.FAVORITE_DIALOG_LENGTH_NEGATIVE));
            } else if(button != null) {
                button.setEnabled(true);
                input.setError(null);
            }
        }
    });
于 2014-07-25T15:31:32.557 回答
0

我找到了方法。重要的一点是在显示警报对话框之后,只有我们应该进行启用/禁用操作。所以为了禁用对话框,我使用了下面的代码。

alertDialog.setOnShowListener(new OnShowListener() {

            @Override
            public void onShow(DialogInterface dialog) {

                Button positive = alertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
                positive.setEnabled(false);

            }
        });
于 2012-10-20T15:16:53.760 回答