android dialog自动关闭,android – 无法在自动关闭的Dialog中设置setError

在Android应用中,当尝试在EditText中设置错误并显示AlertDialog时遇到问题。问题在于错误消息没有显示,而对话框在点击确认按钮后直接关闭。解决方案是通过在AlertDialog的setOnShowListener中设置按钮的监听器,以便在正负按钮被点击时执行相应的操作,包括显示错误消息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为标题,我在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()的行,但不会显示错误消息,并且对话框只会关闭.

我的做法有什么问题?

编辑:如果你愿意,here是类代码的简化版本,不需要任何外部库.我还添加了layout和strings文件.

解决方法:

尽管您需要更改代码,但您已经采用了正确的方法.

请看下面的代码:

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布局.在视图中对布局进行膨胀,并在AlertDialog实例的setView方法中传递该视图.

只需使用AlertDialog的实例覆盖setOnShowListener.

此后,检索正负按钮,如上所示.

而已.

标签:android,android-dialog,android-alertdialog

来源: https://codeday.me/bug/20190624/1275756.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值