我有一个通过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

最佳答案

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

实施步骤为:


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


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

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

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

10-11 22:26