Android - OnDateChangedListener - 你如何设置它?

Taw*_*ani 56 android android-datepicker

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

DatePicker dp = new DatePicker(getContext());
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

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

任何文档/教程都会非常有用.

Chr*_*Orr 106

创建完成后DatePicker,需要先使用要显示的日期对其进行初始化.这就是你可以添加你的听众的地方.

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

  • Android API真的很棒.我想知道是谁想出了这种荒谬的做法 (107认同)
  • 使用setOnDateChangedListener()方法来设置点击监听器似乎是合适的.我想知道为什么他们会把它初始化为一个日期,它会自动初始化到今天为你? (5认同)

tur*_*oid 38

最好的方法是

        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);

                }
            });
Run Code Online (Sandbox Code Playgroud)


小智 11

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

三个旋转器

一个CalendarView

从OnDateChangeListener开始,传递给init方法的对象将被简单地传递给包含的CalendarView,我相信你知道旧的CalendarView中有一个setOnDateChangeListener方法...... ..

在DatePicker类中,有一个名为getCalendarView的方法,如果你想获得所包含的CalendarView,它就是你可以调用的方法.

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

  • 对于糟糕的API,这是一个很好的解决方法.谢谢你 - 你刚刚保存了我的培根! (3认同)

And*_*rew 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);
    }
});
Run Code Online (Sandbox Code Playgroud)