Android 日期选择器对话框侦听器

Android 日期选择器对话框侦听器,android,android-widget,datepicker,textview,datepickerdialog,Android,Android Widget,Datepicker,Textview,Datepickerdialog,我必须使用DatePickerDialog在文本视图中获取所选日期。当我单击文本视图时,DatePickerDialog应该出现 这是我写的 private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int selecte

我必须使用DatePickerDialog在文本视图中获取所选日期。当我单击文本视图时,DatePickerDialog应该出现

这是我写的

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
        datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
    }
};

datePick = (TextView) findViewById(R.id.date_pick);

    datePick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            monthOfYear = calendar.get(Calendar.MONTH);
            dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
            new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth);
        }
    });
但它不起作用。 所以,我用谷歌搜索一下,就把它改成了这个,它还能工作,但我不明白为什么会这样?我把上面的代码搞乱了吗

datePick = (TextView) findViewById(R.id.date_pick);

    datePick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            monthOfYear = calendar.get(Calendar.MONTH);
            dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
            showDialog(DATE_DIALOG_ID);
        }
    });

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       // set date picker as current date
       return new DatePickerDialog(this, dateOnDateSetListener, 
                     year, monthOfYear,dayOfMonth);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
        datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
    }
};
但它不起作用。所以我用谷歌搜索一下就把它改成了这个 它起作用了,但我不明白为什么会这样?我搞砸了吗 上面代码中的某些内容

datePick = (TextView) findViewById(R.id.date_pick);

    datePick.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            Calendar calendar = Calendar.getInstance();
            year = calendar.get(Calendar.YEAR);
            monthOfYear = calendar.get(Calendar.MONTH);
            dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
            showDialog(DATE_DIALOG_ID);
        }
    });

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       // set date picker as current date
       return new DatePickerDialog(this, dateOnDateSetListener, 
                     year, monthOfYear,dayOfMonth);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {

    @Override
    public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
        datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
    }
};
你没有把事情搞砸,只是忘了在对话框中调用
.show()
;i、 e:

new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show();
它在第二个代码段中不使用
.show()
的原因是
活动管理对话框,因此将负责在
onCreateDialog(int id)
中返回的对话框上调用该方法

一般来说,我建议使用第二种方法,因为您并不想自己管理对话框的生命周期,只是因为在配置更改等情况下重新创建活动时,要将其正确执行是一件非常痛苦的事情。但是,对于更现代的解决方案,使用片段,您应该考虑在(支持库中还有一个版本适用于蜂窝式设备之前的产品)