Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-OnDateChangedListener-如何设置?_Android_Android Datepicker - Fatal编程技术网

Android-OnDateChangedListener-如何设置?

Android-OnDateChangedListener-如何设置?,android,android-datepicker,Android,Android Datepicker,Android中有一个名为DatePicker.OnDateChangedListener的事件侦听器。 我正在尝试按如下方式设置日期选择器视图的日期更改侦听器: DatePicker dp = new DatePicker(getContext()); dp.setOnDateChangedListener(this); //where this is my activity extends DatePicker.OnDateChangedListener 但是你猜怎么着? 日期选择器没有

Android中有一个名为DatePicker.OnDateChangedListener的事件侦听器。 我正在尝试按如下方式设置日期选择器视图的日期更改侦听器:

DatePicker dp = new DatePicker(getContext());
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener
但是你猜怎么着? 日期选择器没有名为setOnDateChangedListener的方法

我的问题是:

  • 那么,如何在Android中设置更改日期的侦听器呢
  • 如果无法设置更改日期的侦听器,则此事件的目的是什么

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

    一旦您创建了
    日期选择器
    ,您就需要使用您希望首先显示的日期对其进行初始化。这是您可以添加侦听器的点


    请参阅。

    调用。

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

    三个纺纱机

    一个日历视图

    对于OnDateChangeListener,您传递给init方法的对象将被简单地传递给包含的CalendarView,我相信您知道在好的旧CalendarView中有一个setOnDateChangeListener方法

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

    一旦您掌握了包含的CalendarView,那么,不用说,您就可以调用它的setOnDateChangeListener,如下所示:

    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);
        }
    });
    
    最好的办法是

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

    Android API真是了不起。我想知道是谁想出了这个可笑的方法。我觉得这并不是那么可笑,至少在API文档中是这样。不管怎样,我想原因是因为Android小部件通常有几个构造函数,当你想控制它应该用什么样式和布局属性来创建的时候——所以他们一直遵循这个惯例,而不是用许多参数创建许多构造函数。使用setOnDateChangedListener()似乎是合适的方法like用于设置单击侦听器。我想知道为什么他们让你将它初始化为一个日期,而它却自动初始化为今天?@Christopher这里可怕的部分主要是有一个时间选择器和一个日期选择器,它们有完全不同的接口。(哇,老帖子…nm)哇,我刚刚花了2个小时来研究如何将一个简单的侦听器设置为日期选择器,直到我发现它不起作用。注意:只有在API级别26中,才能直接使用setOnDateChangedListener()。如果你在下面,你必须使用一个变通方法-这对于一个糟糕的API来说是一个很好的变通方法。谢谢你,你救了我的命!datePicker.getCalendarView().setOnDateChangeListener()完全可以工作!谢谢但不是很直观。仍然认为API应该是datePicker.setOnDateChangeListner()。它给出了不支持的操作异常:DatePickerFlate不存在日历视图使用android:datePickerMode=“spinner”的日期选择器,并且该侦听器为我工作。没有任何逻辑解释。。。