我有一个通过 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 就可以正常工作),而是向我的 AlertDialog
的 EditText
添加了一个验证器>。如果输入的文本无效,则“确定”按钮将被禁用。
实现步骤是:
- 使 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/