这里我有一个自定义对话框,里面有背景2 ImageButton。 问题是,当我尝试将onclick监听器设置为该按钮时,程序将返回NullPointerException。我不知道为什么会这样。如何将操作分配给对话框内的按钮?
暂停菜单xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:layout_width="wrap_content" android:background="@drawable/pause_menu_cropped" android:layout_gravity="center" android:gravity="center|center_horizontal">
<TableLayout android:layout_width="wrap_content" android:id="@+id/tableLayout1" android:layout_height="wrap_content">
<ImageButton android:src="@drawable/pause_button_option" android:layout_width="wrap_content" android:background="@drawable/pause_button_option" android:layout_height="wrap_content" android:id="@+id/btn_pause_option"></ImageButton>
<ImageButton android:src="@drawable/pause_button_quit" android:layout_width="wrap_content" android:background="@drawable/pause_button_quit" android:layout_height="wrap_content" android:id="@+id/btn_pause_quit"></ImageButton>
</TableLayout>
</LinearLayout>
对话框代码
Dialog pauseMenu = new Dialog(this, R.style.NewDialog);
pauseMenu.setContentView(R.layout.pause_menu);
ImageButton quit = (ImageButton)findViewById(R.id.btn_pause_quit);
quit.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
TestActivity.this.finish();
}
});
return pauseMenu;
代码在行
中返回错误quit.setOnClickListener();
答案 0 :(得分:7)
ImageButton quit = (的ImageButton)findViewById(R.id.btn_pause_quit);
应该是
ImageButton quit = (ImageButton)pauseMenu.findViewById(R.id.btn_pause_quit);
这是因为为活动调用了findViewById
,并且它的布局中没有btn_pause_quit
按钮。但你的对话有。
答案 1 :(得分:4)
你可以使用这个自定义对话框和onclicklistener ..
public class CustomizeDialog extends Dialog implements OnClickListener {
Button okButton;
public CustomizeDialog(Context context) {
super(context);
/** 'Window.FEATURE_NO_TITLE' - Used to hide the title */
requestWindowFeature(Window.FEATURE_NO_TITLE);
/** Design the dialog in main.xml file */
setContentView(R.layout.main);
okButton = (Button) findViewById(R.id.OkButton);
okButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
/** When OK Button is clicked, dismiss the dialog */
if (v == okButton)
dismiss();
}
}
答案 2 :(得分:0)
我认为你的onClickListener应该是DialogInterface.OnClickListener