自定义对话框按钮不调用其OnClick方法

时间:2016-02-03 06:31:20

标签: java android onclicklistener alertdialog android-alertdialog

我有一个名为dialog_main.xml

的自定义对话框布局

在那个布局中有两个按钮。在我的MainActivity中,我定义了两个OnClickListeners并将它们分配给了我的两个按钮。但是,当我的MainActivity启动并出现我的对话框时,单击我的按钮不会执行任何操作。

此外,旁注dialog.setCancelable(false);似乎也没有起作用。如果我没有弄错,那么在单击对话框外部时,应该阻止对话框关闭?

以下内容属于MainActivity

        dialog = new Dialog(MainActivity.this);
        dialog.setContentView(R.layout.dialog_main);
        dialog.setTitle("Checklist");
        dialog.setCancelable(false);
        dialog.show();

        final LayoutInflater factory = getLayoutInflater();
        final View dialogButtonsView = factory.inflate(R.layout.dialog_main, null);

        Button newChecklistButton = (Button) dialogButtonsView.findViewById(R.id.new_checklist_button);
        Button resumeChecklistButton = (Button) dialogButtonsView.findViewById(R.id.resume_checklist_button);

        newChecklistButton.setOnClickListener(newChecklistOnClickListener);
        resumeChecklistButton.setOnClickListener(resumeChecklistOnClickListener);




    private Button.OnClickListener newChecklistOnClickListener = new Button.OnClickListener() {
        @Override
        public void onClick(View view) {
            System.out.println("called");
            dialog.dismiss();
        }
    };

    private Button.OnClickListener resumeChecklistOnClickListener = new Button.OnClickListener() {
        @Override
        public void onClick(View view) {
            System.out.println("called");
            dialog.dismiss();
        }
    };

1 个答案:

答案 0 :(得分:3)

问题正在发生,因为按钮单击侦听器使用dialogButtonsView View对象添加到Button,但它没有作为Dialog View传递给setContentView method.Change:

dialog.setContentView(R.layout.dialog_main);

dialog.setContentView(dialogButtonsView);

修改 因为创建Dialog对象,不需要再次在inflate中传递setContentView来访问View,只需使用dialog对象来调用findViewById方法,如:

Button newChecklistButton =(Button)dialog.findViewById(R.id.new_checklist_button);