作为标题,我在EditText mEditText
内设置错误时遇到问题。
private AlertDialog.Builder buildDialog(String mailString)
{
final AlertDialog.Builder alertDialogBuilder =
new AlertDialog.Builder(LoginActivity.this);
alertDialogBuilder.setTitle("Insert mail");
alertDialogBuilder.setMessage("email");
// Set an EditText view to get user input
mMailEditText = new EditText(LoginActivity.this);
if (mailString != null)
mMailEditText.setText(mailString);
alertDialogBuilder.setView(mMailEditText);
alertDialogBuilder.setPositiveButton(
"Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
String email = mMailEditText.getText().toString();
if (!TextUtils.isEmpty(email) && !isEmailValid(email))
{
mMailEditText.setError(getString(
R.string.activity_login_error_invalid_email));
}
else
{
attemptLoginOrRegister(UserTasks.REGISTER, email);
}
}
});
alertDialogBuilder.setNegativeButton(
"Cancel", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton)
{
dialog.cancel();
}
});
mAlertDialog = alertDialogBuilder.create();
return alertDialogBuilder;
}
private void setListeners()
{
mRegisterButton.setOnClickListener(
new View.OnClickListener()
{
@Override
public void onClick(View v)
{
buildDialog(null).show();
}
});
}
始终从setListeners()
调用 onCreate
,而当用户点击注册按钮时调用buildDialog
。
调试应用程序时,如果电子邮件无效,则正确执行包含mMailEditText.setError()
的行,但不显示错误消息,对话框只会关闭。
我的方法出了什么问题?
答案 0 :(得分:4)
虽然您需要更改代码,但您已采用正确的方法。 请查看以下代码:
View view = getLayoutInflater().inflate(R.layout.custom_dialog, null);
final EditText editTextEmail = (EditText) view.findViewById(R.id.editCategory);
final AlertDialog alertDialog = new AlertDialog.Builder(LoginActivity.this)
.setView(view)
.setPositiveButton(R.string.str_ok, null)
.setNegativeButton(R.string.str_cancel, 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) {
// Do whatever you want when positive button is clicked
});
Button buttonNegative = ((AlertDialog) dialog).getButton(DialogInterface.BUTTON_NEGATIVE);
buttonNegative.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Do whatever you want when negative button is clicked
}
});
}
});
alertDialog.show();
创建包含所需EditText
的XML布局。在视图中对布局进行通知,并在setView
实例的AlertDialog
方法中传递该视图。
只需使用setOnShowListener
的实例覆盖AlertDialog
即可。
此后,检索正负按钮,如上所示。
就是这样。