所以我有以下 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)
您可以通过覆盖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)
| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |