在AlertDialog.Builder中使用findViewById()时出现NullPointerException

pav*_*ver 2 android dialog nullpointerexception findviewbyid

这是我的代码

@Override
public void onClick(View v) {
final AlertDialog.Builder adb = new AlertDialog.Builder(getApplicationContext());
adb.setView(LayoutInflater.from(getApplicationContext()).inflate(R.layout.custom, null));

adb.setPositiveButton("Add",new android.content.DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int arg1) {

                DatePicker datePicker = (DatePicker)findViewById(R.id.datePicker);

                java.util.Date date = null;
                Calendar cal = GregorianCalendar.getInstance();
                cal.set(datePicker.getYear(),datePicker.getMonth(), datePicker.getDayOfMonth());
                date = cal.getTime();
            }                  
        });             
adb.show();
}
Run Code Online (Sandbox Code Playgroud)

我在这一行中有NullPointerException,我认为datePicker不是findById,因为我使用AlertDialog.Builder.

cal.set(datePicker.getYear(),datePicker.getMonth(),datePicker.getDayOfMonth());

我试过使用adb.findViewById();但它是一个错误(方法findViewById(int)未定义类型AlertDialog.Builder).你能帮我吗?

Kha*_*aza 15

更改

DatePicker datePicker = (DatePicker)findViewById(R.id.datePicker);
Run Code Online (Sandbox Code Playgroud)

这行到

DatePicker datePicker = (DatePicker)adb.findViewById(R.id.datePicker);
Run Code Online (Sandbox Code Playgroud)

...............

试试这个:

final AlertDialog.Builder adb = new AlertDialog.Builder(this);
final View view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.main1, null);
adb.setView(view);
final Dialog dialog;
adb.setPositiveButton("Add",new android.content.DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int arg1) {

        DatePicker datePicker = (DatePicker)view.findViewById(R.id.datePicker1);

        java.util.Date date = null;
        Calendar cal = GregorianCalendar.getInstance();
        cal.set(datePicker.getYear(),datePicker.getMonth(), datePicker.getDayOfMonth());
        date = cal.getTime();
    }                  
});   
dialog = adb.create();
dialog.show();
Run Code Online (Sandbox Code Playgroud)