我在创建自定义对话框时遵循了Android文档。当我单击启动我的自定义对话框应用程序的按钮时。崩溃。我该如何开始对此进行故障排除?
对话框:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/relativeLayout1" android:gravity="center_vertical" android:layout_height="wrap_content" android:layout_width="fill_parent">
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkBlueTooth" android:id="@+id/chkBlueTooth" android:layout_below="@+id/chkAudio" android:layout_alignLeft="@+id/chkAudio"></CheckBox>
<Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_below="@+id/chkBlueTooth" android:layout_alignLeft="@+id/chkBlueTooth" android:id="@+id/btnOK" android:text="@string/btnOK"></Button>
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkNetwork" android:id="@+id/chkNetwork" android:layout_above="@+id/chkBlueTooth" android:layout_toRightOf="@+id/chkBlueTooth"></CheckBox>
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkWifi" android:id="@+id/chkWifi" android:layout_below="@+id/chkNetwork" android:layout_alignLeft="@+id/chkNetwork" android:layout_alignRight="@+id/chkNetwork"></CheckBox>
<CheckBox android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/chkAudio" android:id="@+id/chkAudio" android:layout_below="@+id/txtChoose" android:layout_alignLeft="@+id/txtChoose"></CheckBox>
</RelativeLayout>
对话框的代码: static final int TIME_DIALOG_ID = 0; static final int POWER_OFF_OPTIONS = 1;
@覆盖 protected Dialog onCreateDialog(int id){ 对话框对话框; switch(id){ case TIME_DIALOG_ID: 返回新的TimePickerDialog(这个, mTimeSetListener,mHour24,mMinute,false);
case POWER_OFF_OPTIONS:
AlertDialog.Builder builder;
AlertDialog alertDialog;
Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.options,
(ViewGroup)findViewById(R.id.relativeLayout1));
//Capture view elements
mChkAudio = (CheckBox) findViewById(R.id.chkAudio);
mChkBluetooth = (CheckBox) findViewById(R.id.chkBlueTooth);
mChkNetwork = (CheckBox) findViewById(R.id.chkNetwork);
mChkWifi = (CheckBox) findViewById(R.id.chkWifi);
mBtnOK = (Button) findViewById(R.id.btnOK);
mBtnOK.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
DismissPowerOptions();
}
});
builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();
//return builder;
default:
dialog = null;
}
return dialog;
}
显示对话框并崩溃应用程序的按钮:
mBtnPowerOffOptions.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//stuff for Options dialog
showDialog(POWER_OFF_OPTIONS);
}
});
答案 0 :(得分:1)
你在错误的对象上调用findViewById;父视图(或活动)。
在builder.setView(...)之后执行
AlertDialog myDialog = builder.create();
现在您可以调用findViewById
//Capture view elements mChkAudio = (CheckBox) myDialog.findViewById(R.id.chkAudio); . . .