日期选择器对话框侦听器

时间:2013-04-02 08:22:16

标签: android android-widget datepicker textview datepickerdialog

我必须使用DatePickerDialog在textview中获取所选日期。当我单击textview时,应该出现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));
    }
};

1 个答案:

答案 0 :(得分:0)

  

但它不起作用。因此,通过谷歌搜索,我改变了这一点   它的工作,但我不明白为什么会这样?我弄得一团糟吗   以上代码中的内容

你没有把任何东西弄得乱七八糟,你只是忘了在对话框上打电话给.show();即:

new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show();

在第二个代码片段中没有.show()的情况下工作的原因是因为Activity管理对话框,因此会在{{1}中返回的对话框中调用该方法}}。

一般来说,我建议使用第二种方法,因为你并不真的想自己管理对话框的生命周期 - 只是因为在你的活动在配置变化等上重新创建时,要做到正确是非常痛苦的。但是,对于一个更现代的解决方案,使用片段,您应该考虑将对话框包装在DialogFragment中(支持库中的一个版本也适用于预蜂窝设备)。