Android Studio - AlertDialog中的DatePicker,null对象引用

时间:2017-10-19 23:21:14

标签: java android android-studio datepicker alertdialog

我的应用程序中有一个活动,我希望用户从DatePicker中选择日期,该日期包含在AlertDialog中。在AlertDialog中,我将视图设置为xml布局文件(其中只包含一个LinearLayout,只有一个DatePicker。

代码非常简单,看起来像这样,就在onCreate()下面。

datePicker.setMinDate(System.currentTimeMillis() - 1000);

布局显示在AlertDialog中,该部分效果很好。 但是,当我尝试添加此行时,我得到一个空对象引用错误。

curl -XPOST http://0.0.0.0:8000/parse --data 'locale=en_GB&text=tomorrow at eight'

以下是错误消息。

  

尝试调用虚方法' void   android.widget.DatePicker.setMinDate(长)'在空对象引用上

如何解决此问题,或以其他方式改进我的代码? 我非常感谢能得到的所有帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题是您的findViewById正在查找DatePicker视图的错误位置。在活动中调用findViewById将在Activity的布局层次结构上调用它,而不是对话框的布局。您需要首先为警报对话框扩充布局,然后获取对视图的引用。这可以通过几种方式实现。

可能最简单的方法是在显示对话框之前给视图充气并获取参考:

View dialogView = LayoutInflater.from(this).inflate(R.layout.activity_alertdialog_date, false);
DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.Activity_AlertDialog_SetStartDate);

AlertDialog.Builder alert  = new AlertDialog.Builder(this);
alert.setView(dialogView);
//  ... The rest of the AlertDialog, with buttons and all that stuff
alert.create().show();

您也可以在创建后从警告对话框中获取视图:

AlertDialog.Builder alert  = new AlertDialog.Builder(this);
alert.setView(R.id.Activity_AlertDialog_SetStartDate);
//  ... The rest of the AlertDialog, with buttons and all that stuff
AlertDialog dialog = alert.create();

dialog.show();
DatePicker datePicker = (DatePicker) dialog.findViewById(R.id.Activity_AlertDialog_SetStartDate);