日期选择器对话框监听器

3
我需要使用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个回答

1
但它没有起作用。所以我通过一点搜索将其更改为这个,现在它可以工作了,但我不明白为什么会这样?我在上面的代码中弄错了什么吗?
你并没有真正搞砸什么,只是忘记在对话框上调用.show()方法;即:
```python .dialog('open') .dialog('show'); ```
new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show();

第二个代码片段中为什么不需要使用.show()方法的原因是因为在那里Activity管理对话框并且会负责调用onCreateDialog(int id)返回的对话框的该方法。

通常我建议采用第二种方法,因为您不需要自己管理对话框的生命周期 - 因为当您的活动在配置更改等情况下重新创建时,这很难做到。但是,对于更现代的解决方案,使用片段,您应该考虑将对话框包装在DialogFragment中(支持库中也有适用于早期版本的设备)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接