Android Dialog.setOnShowListener()API级别的备选方案<;8.
我有一个通过Android Dialog.setOnShowListener()API级别的备选方案<;8.,android,android-dialog,android-dialogfragment,Android,Android Dialog,Android Dialogfragment,我有一个通过DialogFragment.onCreateDialog()实现的AlertDialog。该对话框有一个编辑文本和两个按钮,确定和取消。单击“确定”按钮时,我需要对编辑文本的内容进行一些检查:如果内容错误,则不应取消对话框。通过搜索,我发现通过以下方式可以轻松实现此功能: @Override public Dialog onCreateDialog(Bundle savedInstanceState) { view = getActivity().getLayoutInfl
DialogFragment.onCreateDialog()
实现的AlertDialog
。该对话框有一个编辑文本和两个按钮,确定和取消。单击“确定”按钮时,我需要对编辑文本的内容进行一些检查:如果内容错误,则不应取消对话框。通过搜索,我发现通过以下方式可以轻松实现此功能:
@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尝试膨胀具有布局(使用edittext、按钮和任何其他小部件设计)的特定活动作为清单文件中的主题对话框尝试膨胀具有布局(使用edittext、按钮和任何其他小部件设计)的特定活动作为清单文件中的主题对话框如果使用findViewById()
获取按钮并直接为其设置一个onClickListener
,该怎么办?如果可以的话,您可能不需要一个onSwickListener
。如果您使用findViewById()
获取按钮并直接为其设置一个onClickListener
,会怎么样?如果可行的话,您可能不需要一个onShowListener
。好的,最后我用另一种方法解决了它。我没有使用AlertDialog.setOnShowListener()
(如果API级别>7,它可以正常工作),而是在我的AlertDialog
的EditText
中添加了一个验证器。如果输入的文本无效,则“确定”按钮将被禁用
实施步骤如下:
- 进行活动以实现
界面TextWatcher
包含执行验证和启用/禁用OK按钮的代码PostTextChanged()
- 在
对话框fragment.onCreateDialog()中,将TextChanged listener添加到EditText(见下文)
mEditText.addTextChangedListener((MainActivity)getActivity());
好的,最后我用另一种方法解决了这个问题。我没有使用
AlertDialog.setOnShowListener()
(如果API级别>7,它可以正常工作),而是在我的AlertDialog
的EditText
中添加了一个验证器。如果输入的文本无效,则“确定”按钮将被禁用
实施步骤如下:
- 进行活动以实现
界面TextWatcher
包含执行验证和启用/禁用OK按钮的代码PostTextChanged()
- 在
对话框fragment.onCreateDialog()中,将TextChanged listener添加到EditText(见下文)
mEditText.addTextChangedListener((MainActivity)getActivity());
我正试着去做。问题是,必须在创建并显示对话框后设置onClickListener。我只是不知道在哪里插入您建议的代码,我最好的选择是在调用show(getSupportFragmentManager(),“dialog”)后立即将其添加到我的活动中,但它失败了。如果您在之前添加它会发生什么?它是否给您一个错误?是的,我找不到该按钮,因为我无法获取对AlertDialog实例的引用。所以像ad.getButton(AlertDialog.BUTTON_-POSITIVE)这样的东西会引发NullPointerException代码>?实际上,为什么不在调用
setPositiveButton()
的地方执行呢?你还需要另一个按钮吗?我正在试着。问题是,必须在创建并显示对话框后设置onClickListener。我只是不知道在哪里插入您建议的代码,我最好的选择是在调用show(getSupportFragmentManager(),“dialog”)后立即将其添加到我的活动中,但它失败了。如果您在之前添加它会发生什么?它是否给您一个错误?是的,我找不到该按钮,因为我无法获取对AlertDialog实例的引用。所以像ad.getButton(AlertDialog.BUTTON_-POSITIVE)这样的东西会引发NullPointerException代码>?实际上,为什么不在调用setPositiveButton()
的地方执行呢?你还需要另一个按钮吗?