AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setView(LayoutInflater.from(context).inflate(R.layout.custom, null));
// ...
DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); // 錯誤:在 Activity 中找,不在對話框中
View dialogView = LayoutInflater.from(context).inflate(R.layout.custom, null);
AlertDialog.Builder adb = new AlertDialog.Builder(context);
adb.setView(dialogView);
adb.setPositiveButton("確定", (dialog, which) -> {
DatePicker datePicker = dialogView.findViewById(R.id.datePicker); // 在 dialogView 上查找
// 使用 datePicker...
});
adb.show();
AlertDialog.Builder 本身**不是 View**,無 findViewById 方法。setView(View) 接收的 View 即為對話框內容根視圖,所有子控件查找都在該 View 上進行。onClick 後獲取輸入值,**必須**持有該 View 引用(final 或成員變量)。現代開發推薦繼承 DialogFragment,在 onCreateDialog 中構建,onCreateView 中充氣佈局,生命周期管理更完善。