2

这是我的代码

@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();
}

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

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

我尝试使用adb.findViewById();,但这是一个错误(对于 AlertDialog.Builder 类型,方法 findViewById(int) 未定义)。你能帮我吗?

4

5 回答 5

15

改变

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

这条线到

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

…………………………………………………………………………

试试这个:

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();
于 2012-10-23T08:24:58.030 回答
2

搜索DatePicker使用dialog参数:

DatePicker datePicker = (DatePicker) ((Dialog) dialog).findViewById(R.id.datePicker);
于 2012-10-23T08:22:42.500 回答
2

我认为这可能是问题所在

final AlertDialog.Builder adb = new AlertDialog.Builder(getApplicationContext());
adb.setView(LayoutInflater.from(getApplicationContext()).inflate(R.layout.custom,null));

使用下面的方法来膨胀视图并使用视图对象来获取 id。

 LayoutInflater factory = LayoutInflater.from(this);
    final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);

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

例子:

protected Dialog onCreateDialog() {
    LayoutInflater factory = LayoutInflater.from(this);
    final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);
    return new AlertDialog.Builder(TicTacToe.this)
        //.setIconAttribute(android.R.attr.alertDialogIcon)
        .setTitle(getTitleText())
        .setView(textEntryView)
        .setPositiveButton("JOIN GAME", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int whichButton) {
                try
                {
                    EditText et = (EditText)findViewById(R.id.username_edit);
                        playerName = et.getText().toString();
                }
                catch (Exception e)
                {
                }
            }
        })
        .create();
return null;

}

于 2014-06-12T06:01:39.167 回答
0

就我而言:首先我必须调用

对话框.show(),

只有在它之后我才能使用

dialog.findviewById(R.id.myID)。

如果我错过了调用 show(),那么我会通过 findViewByID 得到一个空值。

于 2015-06-15T14:28:58.983 回答
0

清理和重建项目为我修复了此错误(在 Xamarin 上)。

于 2017-03-25T14:10:53.207 回答