按下按钮时避免关闭support.v7.app.AlertDialog

时间:2016-02-11 19:11:22

标签: android alertdialog

在我的应用程序中,我正在显示一个自定义AlertDialog,供用户输入字符串。当用户按下肯定按钮时,应该有AsyncTask以检查用户提供的字符串。如果检查成功,我想dismiss() AlerDialog,另一方面,如果检查失败,我希望AlerDialog保持可见,以便用户进行必要的更正。< / p>

问题在于我不知道如何在点击任何按钮后忽略AlerDialog (我已经检查了所有按钮)。

我在this question找到的答案似乎都没有。

这是我的一段代码

LayoutInflater inflater = getActivity().getLayoutInflater();
View dialogView = inflater.inflate(R.layout.generic_textinput_dialog, null);

final EditText editText = (EditText) dialogView.findViewById(R.id.generic_dialog_text_editText);
editText.setHint("Username");

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
dialogBuilder.setMessage("Share xxx");
dialogBuilder.setPositiveButton("Share", new DialogInterface.OnClickListener() {

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

        String sharingUser = editText.getText().toString();
        if (!TextUtils.isEmpty(sharingUser)) {
            doSomething();
        }

        actionMode.finish();
    }
});
dialogBuilder.setNegativeButton("Cancel", null);
dialogBuilder.setView(dialogView);
dialogBuilder.show();

知道如何解决这个问题吗?

注意

  • 显然,即使在点击任何按钮后对话被解除,我也没有在任何地方使用dialog.dismiss()
  • 我使用的是API v23.1.1。

1 个答案:

答案 0 :(得分:0)

您始终可以覆盖单击侦听器上的按钮以避免使用默认功能。

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
dialogBuilder.setMessage("Share xxx");
dialogBuilder.setPositiveButton("Share", null);
dialogBuilder.setNegativeButton("Cancel", null);
dialogBuilder.setView(dialogView);
dialogBuilder.show();
    Button positive = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
            positive.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                        String sharingUser = editText.getText().toString();
                        if (!TextUtils.isEmpty(sharingUser)) {
                          doSomething();
                        }

                        actionMode.finish();
                }
   });