gpt4 book ai didi

android - onClick 事件发生时更改对话框的内容

转载 作者:太空狗 更新时间:2023-10-29 13:35:25 26 4
gpt4 key购买 nike

在我的应用程序中,我创建了一个对话框来接受密码。在对话框中,存在一条消息、一个 EditText 和两个按钮(一个 +ve 和一个 -ve)。当用户点击 +ve 按钮时,我正在检查在 EditText 中输入的密码是否有效。如果无效,我必须更改提示用户再次输入密码的对话框的消息。

如果密码有效,它会按预期工作,但密码无效,它不会更新消息,而是简单地关闭对话框。

我已经尝试通过覆盖 onPrepareDialog() 来解决它,但它也不起作用。

这是我的代码:

protected Dialog onCreateDialog(int viewId){
AlertDialog dialog = null;
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Enter Password To Continue");
final EditText passwordField = new EditText(getApplicationContext());
builder.setView(passwordField);
builder.setPositiveButton("SUBMIT", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

if(passwordField.getText().toString().equals("password")){
Intent intent = new Intent(MyFirstActivity.this, NextActivity.class);
finish();
startActivity(intent);
}else{
//Here I need to update the message
builder.setMessage("SORRY!!! Wrong Password Entered.\n Re-Enter Correct Password Again ");
}
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
dialog = builder.create();
}
return dialog;
}

最佳答案

我认为这里有两个问题。

  1. 如果我没记错的话,AlertDialog 上的 PositiveButton 的默认行为将关闭对话框。我认为这就是密码错误时您关闭的原因。我想如果你切换到

    builder.setNeutralButton(...);

    按下时不会关闭对话框。

  2. 您正在更改生成器上的消息而不是对话框本身。我不认为生成器会在对话框创建和显示后动态更改对话框的外观。

    dialog.setMessage("WRONG PASSWORD");

我想会为你改变它。如果没有,那么您必须制作一个 TextView 并将其添加到您的对话框中 builder.setView(mTxt); 然后您可以调用 setText(); 在您的引用它将更改屏幕上的文本。

我认为比任何一个更好的解决方案可能是 Toast虽然弹出。用户刚刚输入了密码并按下了提交,所以我认为可以指望他们会看屏幕。许多其他具有登录页面的应用程序使用 Toast 消息来告诉用户他们是否输入了错误的密码,所以我认为您不会混淆您的用户或其他任何东西,这是一种常见的设计模式。

编辑:

AlertDialog 类确实有一个 setMessage() 方法。 see the docs here .它靠近文档页面的底部,因此当您正确单击链接时它不会滚动到顶部。但它就在那里,对我来说是从上往下的第三个。在 setInverseBackgroundForcedsetTitle

之间

编辑 2:

我实现了类似于您刚才尝试做的事情。我必须将自己的自定义监听器对象与我认为的对话框按钮一起使用,以便让它们在按下时不隐藏对话框。

这是我创建和显示对话框的方式:

  AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);
builder.setCancelable(false)
.setMessage("Please Enter Something")

.setPositiveButton("Enter", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//All of the fun happens inside the CustomListener now.
//I had to move it to enable data validation.
}
});
AlertDialog alertDialog = builder.create();
alertDialog.show();
Button theButton = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE);
theButton.setOnClickListener(new CustomListener(alertDialog));

然后我在 Activity 中创建了一个名为 CustomListener 的内部类,如下所示:

class CustomListener implements View.OnClickListener {
private final Dialog dialog;
public CustomListener(Dialog dialog) {
this.dialog = dialog;
}
@Override
public void onClick(View v) {


if(passwordField.getText().toString().equals("password")){
//Password is correct.


} else { //Password is incorrect.
((AlertDialog)dialog).setMessage("WRONG");
}
}
}

当您以这种方式设置监听器时,它不会在按下按钮时自动关闭对话框。

关于android - onClick 事件发生时更改对话框的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11120393/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com