单击 PositiveButton 并且条件不成立时防止对话框关闭

Sta*_*wed 2 java android

所以我有以下 AppCompatDialogFragment。我希望我的 PositiveButton 关闭对话框,除非某些条件为真。我不知道如何实现这一目标。

public class ColorPicker extends AppCompatDialogFragment {
    private EditText editTextCode;
    private ColorPickerListener listener;
        /*other stuff*/

 public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = getActivity().getLayoutInflater();
    final View view = inflater.inflate(R.layout.color_picker, null);
    builder.setView(view);
    builder.setTitle("Enter HEX code");
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

        }
    });
    builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            String code = editTextCode.getText().toString();
            if(code.length() != 6 && !code.matches("[0-9A-F]+")){
                //HERE I WANT TO PREVENT THE DIALOG FROM CLOSING!!
            }
            listener.applyHex(code);
        }
    });
      /* ... */
    return builder.create();
 }
Run Code Online (Sandbox Code Playgroud)

Sag*_*gar 6

您可以通过覆盖OnClickListenerPositive Button 来实现它,如下所示

        dialog.show();
        dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String code = editTextCode.getText().toString();
                if(code.length() != 6 && !code.matches("[0-9A-F]+")){
                    //Don't dismiss
                } else{
                    dialog.dismiss();
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

笔记:

请记住在调用之后执行此操作dialog.show(),否则您最终会得到NullPointerException.

由于您正在使用,请按照以下AppCompatDialogFragment方式进行操作onResume()ColorPicker

final AlertDialog dialog = (AlertDialog)getDialog();
 dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String code = editTextCode.getText().toString();
                if(code.length() != 6 && !code.matches("[0-9A-F]+")){
                    //Don't dismiss
                } else{
                    dialog.dismiss();
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)