Android:AlertDialog中的按钮

4

你好
在我的安卓应用中,我想要从AlertDialog中的EditText小部件获取用户输入。如果用户未输入合法文本并单击确认按钮,则AlertDialog不应关闭,并应做出一些响应。我该怎么办?
这是我的当前代码:

        li = LayoutInflater.from(this);
        View editNickView = li.inflate(R.layout.dialog_edit_nick,
                null);

        AlertDialog.Builder editNickBuilder = new AlertDialog.Builder(
                this);
        editNickBuilder.setTitle(R.string.edit_nick);
        editNickBuilder.setView(editNickView);
        AlertDialog editNick = editNickBuilder.create();

        editNick.setButton(getText(R.string.com_confirm),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        AlertDialog editNick = (AlertDialog)dialog;
                        EditText et = (EditText)editNick.findViewById(R.id.et_nick_new);
                        mCurUser.setName(et.getText().toString()) ;
                        editNick(mCurUser);                         
                    }
                });

        editNick.setButton2(getText(R.string.com_cancel),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        return;
                    }
                });

        return editNick;

thanks!

2个回答

4

当AlertDialog的一个按钮被点击时,它总是关闭。如果您不希望发生这种情况,请不要调用setButton,而是将按钮放在您的自定义布局xml中。检查前提条件,并在需要关闭对话框时调用editNick.dismiss()

一些代码片段可能会有所帮助:

View editNickView = li.inflate(R.layout.dialog_edit_nick, null);
....
final AlertDialog editNick = editNickBuilder.create();
Button button = (Button) editNickView.findViewById(R.id.your_button_id);
button.setOnClickListener(new View.OnClickListener() {
      public void onClick(View view) {
....
          if(shouldClose) {
            editNick.dismiss();
          }
          else {
//Make a toast or something here.
          }
      }
    });

3
为此,将您的按钮放置在线性布局或布局中,不要使用AlertDialog提供的默认按钮。
在XML文件中设置按钮后,您可以使用以下代码创建按钮对象:
Button b1 = editNickView.findViewById(<ID of button1>);

然后你需要为这个按钮创建一个监听器。现在,在监听器中,如果你发现用户输入了正确的内容,那么调用:

editNick.dismiss();

关闭对话框,否则,对话框将对用户可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接