61

Android 中有一个名为DatePicker.OnDateChangedListener的事件监听器。我正在尝试设置 DatePicker 视图的日期更改侦听器,如下所示:

DatePicker dp = new DatePicker(getContext());
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener

但猜猜怎么了?日期选择器没有名为setOnDateChangedListener的方法。

我的问题是:

  1. 那么如何在 Android 中设置更改日期的侦听器?
  2. 如果无法设置更改日期的侦听器,那么此事件的目的是什么?

任何文档/教程都会非常有帮助。

4

5 回答 5

117

一旦你创建了你的DatePicker,你需要首先用你想要显示的日期来初始化它。这就是您可以添加listener的地方。

DatePicker.init(int, int, int, OnDateChangedListener)

更新

26 API 允许设置监听器:DatePicker.setOnDateChangedListener()

于 2010-01-12T18:11:28.423 回答
45

最好的方法是

        DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() {

                @Override
                public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) {
                    Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth);

                }
            });
于 2016-01-22T17:20:13.933 回答
10

这个视图实际上是四个视图的组合,它们是:

三个纺纱厂

一个日历视图

至于OnDateChangeListener,你传给init方法的对象会简单的传给包含的CalendarView,相信你也知道在好老的CalendarView里面有一个setOnDateChangeListener方法………​​… ..

在 DatePicker 类中,有一个名为 getCalendarView 的方法,如果您想获得包含的 CalendarView,可以调用该方法。

一旦你掌握了包含的 CalendarView,那么,不用说,你可以调用它的 setOnDateChangeListener

于 2013-05-16T09:38:18.457 回答
9

像这样的东西:

DatePicker myDatePicker = (DatePicker) findViewById(R.id.my_date_picker);
myDatePicker.getCalendarView().setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
    @Override
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
        Log.d("tag", "finally found the listener, the date is: year " + year + ", month "  + month + ", dayOfMonth " + dayOfMonth);
    }
});
于 2015-08-09T18:51:48.963 回答
5

调用对象init()_DatePicker

于 2010-01-12T18:11:52.230 回答