1

我有一个AlertDialog通过DialogFragment.onCreateDialog(). 该对话框有一个EditText和两个按钮,确定和取消。单击“确定”按钮时,我需要检查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 或更高。有人可以给我一个替代方案吗?TIA

4

3 回答 3

1

好的,最后我用不同的方法解决了它。我没有使用AlertDialog.setOnShowListener()(如果 API 级别 > 7 可以正常工作),而是在EditText我的AlertDialog. 如果输入的文本无效,则确定按钮将被禁用。

实施步骤如下:

  • 使活动实现TextWatcher接口
  • afterTextChanged()包含执行验证和启用/禁用“确定”按钮的代码
  • DialogFragment.onCreateDialog()将 TextChanged 侦听器添加到 EditText 中(见下文)

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

mEditText.addTextChangedListener((MainActivity)getActivity());
于 2012-08-15T11:50:19.573 回答
0

尝试将具有布局(使用 edittext 、按钮和任何其他小部件设计)的特定活动膨胀为清单文件中的主题对话框

于 2012-08-14T17:20:29.563 回答
0

如果您使用按钮并直接为其findViewById()设置一个怎么办?onClickListener如果可行,您可能不需要onShowListener

于 2012-08-14T17:29:40.877 回答