Java 自定义对话框按钮不调用其OnClick方法
我有一个自定义的对话框布局,名为Java 自定义对话框按钮不调用其OnClick方法,java,android,onclicklistener,android-alertdialog,Java,Android,Onclicklistener,Android Alertdialog,我有一个自定义的对话框布局,名为Dialog\u main.xml 在这个布局中有两个按钮。在我的main活动中,我定义了两个OnClickListeners,并将它们分配给我的两个按钮。但是,当myMainActivity启动并显示my对话框时,单击my按钮不会起任何作用 另外,作为旁注dialog.setCancelable(false)似乎也不起作用。如果我没有弄错的话,那是为了防止在对话框外单击时关闭对话框 以下内容在我的main活动中: dialog = new Dia
Dialog\u main.xml
在这个布局中有两个按钮。在我的main活动中
,我定义了两个OnClickListeners
,并将它们分配给我的两个按钮。但是,当myMainActivity
启动并显示my对话框时,单击my按钮不会起任何作用
另外,作为旁注dialog.setCancelable(false)代码>似乎也不起作用。如果我没有弄错的话,那是为了防止在对话框外单击时关闭对话框
以下内容在我的main活动中:
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();
}
};
出现问题的原因是,按钮单击侦听器是使用dialogButtonsView
View对象添加到按钮的,但它不是作为对话框视图传递给setContentView
方法。更改:
dialog.setContentView(R.layout.dialog_main);
到
编辑:
由于正在创建对话框对象,因此无需在中再次充气,而该充气会在setContentView
中传递以访问视图,只需使用Dialog
对象调用findViewById
方法,如下所示:
Button newChecklistButton =(Button)dialog.findViewById(R.id.new_checklist_button);
甜蜜而简单,谢谢!我会接受这个答案,当它成为可用的。
Button newChecklistButton =(Button)dialog.findViewById(R.id.new_checklist_button);