>我正在使用AlertDialog构建器从用户那里获取一些输入,我在其中编写了一个小的验证,例如:如果EditText为空,则显示SnackBar并且不关闭对话框。
发生了什么,一旦用户将 EditText 留空并点击"积极"按钮,在小吃栏中获取消息,但也关闭对话框。
那么我如何控制关闭警报对话框,如果条件失败,这是代码:
public void inputDialog() {
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(context);
final View mView = layoutInflaterAndroid.inflate(R.layout.layout_dialog, null);
final AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(context);
acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);
alertDialogBuilderUserInput.setView(mView);
alertDialogBuilderUserInput
.setCancelable(false)
.setPositiveButton("SAVE", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogBox, int id) {
// ToDo get user input here
String strUserInput = acceptUserInput.getText().toString().trim();
if(TextUtils.isEmpty(strUserInput)) {
Snackbar snackbar = Snackbar.make(mView, "Name field cannot be left blank", Snackbar.LENGTH_LONG);
snackbar.show();
return;
}
}
})
.setNegativeButton("CLOSE",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogBox, int id) {
dialogBox.cancel();
}
});
AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create();
alertDialogAndroid.show();
}
您可以按如下方式设置 onShowListener
:View view = getLayoutInflater().inflate(R.layout.layout_dialog, null);
acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);
final AlertDialog alertDialog = new AlertDialog.Builder(context)
.setView(view)
.setCancelable(false)
.setPositiveButton("SAVE", null)
.setNegativeButton("CLOSE", null)
.create();
alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button buttonPositive = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_POSITIVE);
buttonPositive.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String strUserInput = acceptUserInput.getText().toString().trim();
if(TextUtils.isEmpty(strUserInput)) {
Snackbar snackbar = Snackbar.make(mView, "Name field cannot be left blank", Snackbar.LENGTH_LONG);
snackbar.show();
return;
}
});
Button buttonNegative = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
buttonNegative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
alertDialog.dismiss();
}
});
}
});
AlertDialog.Builder mDialog = new AlertDialog.Builder(
MapActivity.this);
AlertDialog mAlertDialog = mDialog.create();
mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override
public void onShow(DialogInterface dialog) {
Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO Do something
mEdt.setText("message");
}
});
}
});
mAlertDialog.show();
根据您的
问题给出的工作解决方案如下:-
public void inputDialog() {
LayoutInflater layoutInflaterAndroid = LayoutInflater.from(context);
final View mView = layoutInflaterAndroid.inflate(R.layout.layout_dialog, null);
final AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(context);
final EditText acceptUserInput = (EditText) mView.findViewById(R.id.acceptUserInput);
alertDialogBuilderUserInput.setView(mView);
alertDialogBuilderUserInput
.setCancelable(false)
.setPositiveButton("SAVE", null)
.setNegativeButton("CLOSE",null);
final AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create();
alertDialogAndroid.show();
alertDialogAndroid.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
String strUserInput = acceptUserInput.getText().toString().trim();
if(TextUtils.isEmpty(strUserInput)) {
Snackbar snackbar = Snackbar.make(mView, "Name field cannot be left blank", Snackbar.LENGTH_LONG);
snackbar.show();
}
}
});
alertDialogAndroid.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
alertDialogAndroid.cancel();
}
});
}