我的应用程序中有一个活动,我希望用户从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(长)'在空对象引用上
如何解决此问题,或以其他方式改进我的代码? 我非常感谢能得到的所有帮助。谢谢!
答案 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);