Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Dialog.setOnShowListener()API级别的备选方案<;8._Android_Android Dialog_Android Dialogfragment - Fatal编程技术网

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
    界面
  • PostTextChanged()
    包含执行验证和启用/禁用OK按钮的代码
  • 对话框fragment.onCreateDialog()中,将TextChanged listener添加到EditText(见下文)
就这些。现在它就像一个符咒

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

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

实施步骤如下:

  • 进行活动以实现
    TextWatcher
    界面
  • PostTextChanged()
    包含执行验证和启用/禁用OK按钮的代码
  • 对话框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()
的地方执行呢?你还需要另一个按钮吗?