android - API 级别 < 8 的 Dialog.setOnShowListener() 替代方案

标签 android android-dialog android-dialogfragment

我有一个通过 DialogFragment.onCreateDialog() 实现的 AlertDialog。该对话框有一个 EditText 和两个按钮,OK 和 Cancel。单击“确定”按钮后,我需要检查 EditText 的内容:如果内容错误,则不应关闭该对话框。在 SO 上搜索我发现可以通过这种方式轻松实现此功能:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    view = getActivity().getLayoutInflater().inflate(AD_LAYOUT, null);
    mEditText = (EditText) view.findViewById(AD_VIEW);
    myAlertDialog = new AlertDialog.Builder(getActivity())
    .setView(view)
    .setTitle(getResources().getString(AD_TITLE))
    .setPositiveButton(getResources().getString(AD_PB),
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonID) {
            //Do nothing. We are going to override this method
        }
    })
    .setNegativeButton(getResources().getString(AD_NB),
            new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int buttonID) {
            ((MainActivity)getActivity()).doNegative(NewGalleryDlg.this);
        }
    })
    .create();
    ad = myAlertDlg;

    ad.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            Button b = ad.getButton(AlertDialog.BUTTON_POSITIVE);
            b.setOnClickListener(new View.OnClickListener(){
                @Override public void onClick(View view) {
                    ((MainActivity)getActivity())
                    .doPositive(NewGalleryDlg.this, mEditText);
                }
            });
        }
    });
    return ad;
}

问题是我使用的是支持库 v4,但 setOnShowListener() 需要 API 级别 8 或更高级别。有人可以给我一个替代方案吗?时间差

最佳答案

好吧,最后我用不同的方法解决了它。我没有使用 AlertDialog.setOnShowListener()(如果 API 级别 > 7 就可以正常工作),而是向我的 AlertDialogEditText 添加了一个验证器>。如果输入的文本无效,则“确定”按钮将被禁用。

实现步骤是:

  • 使 Activity 实现TextWatcher接口(interface)
  • afterTextChanged() 包含执行验证和启用/禁用 OK 按钮的代码
  • DialogFragment.onCreateDialog() 中将 TextChanged 监听器添加到 EditText(见下文)

就是这样。它现在就像一个魅力。

mEditText.addTextChangedListener((MainActivity)getActivity());

关于android - API 级别 < 8 的 Dialog.setOnShowListener() 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957441/

相关文章:

java - 如何在执行 OkHttp 同步请求时获取 HTTP 响应错误代码

android - 在 `Thread.setDefaultUncaughtExceptionHandler` 中显示一个对话框

java - 为什么android自定义对话框会全屏显示

java - DialogFragment 无法识别 finish() 方法

android - 如何找到给定 Android 主题的默认颜色?

android - onDateChanged 方法似乎不起作用

java - 违反 Google 政策通过 PayPal 按钮捐款?

java - 为什么这段 Java 代码有效?编译器不会提示关闭

java - 如何在Android中运行jar文件中的类 Activity ?

android - 自定义 RatingBar 不适用于 Dialog