为什么从未调用过setOnShowListener?

时间:2014-03-20 16:00:48

标签: android

这是我的代码:

mDialog.show();
mDialog.setOnShowListener(new OnShowListener() {
  @Override
  public void onShow(DialogInterface dialog) {
    //some code
  }
});

断点显示永远不会调用//some code。你能帮我理解发生了什么吗?

它是API 8及更高版本(由我的应用程序支持)

3 个答案:

答案 0 :(得分:21)

我可能错了,但你应该在对话框上调用show()之前设置监听器。

答案 1 :(得分:3)

试试这个:

mDialog.setOnShowListener(new OnShowListener() {
  @Override
  public void onShow(DialogInterface dialog) {
    //some code

  }
});

mDialog.show();

这样可以确保在显示对话框之前注册了侦听器。

答案 2 :(得分:0)

声明并初始化AlertDialogBu​​ilder:

   final AlertDialog.Builder dialog =new AlertDialog.Builder(getActivity());

设置对话框参数,如:

警报按钮(正面,负面或中性),

setTitle,setIcon ..

  

不要在这里调用方法 - show() - 从我的回答中读取第二个回答,2个帖子

然后,

创建新的“警报”对话框,该对话框使用具有指定参数的第一个对话框:

   final AlertDialog alert=dialog.create();

并设置OnShowListener,例如:

   alert.setOnShowListener(new DialogInterface.OnShowListener() {
                            @Override
                            public void onShow(DialogInterface dialogInterface) {
                                Button button = alert.getButton(AlertDialog.BUTTON_POSITIVE); 

                                Drawable drawable = getActivity().getResources().getDrawable(
                                        R.drawable.error);


                                drawable.setBounds((int) (drawable.getIntrinsicWidth() * 0.5),
                                        0, (int) (drawable.getIntrinsicWidth() * 1.5),
                                        drawable.getIntrinsicHeight());
                                button.setCompoundDrawables(drawable, null, null, null);
                            }
                        });
  

最后一步是:alert.show();