3

我必须使用 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));
    }
};
4

1 回答 1

1

但它不起作用。所以几乎没有谷歌搜索,我把它改成了这个并且它的工作,但我不明白为什么会这样?我在上面的代码中搞砸了什么吗

您并没有真正搞砸任何事情,只是忘记调用.show()对话框;IE:

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

.show()它在第二个代码片段中没有工作的原因是因为那里Activity管理对话框,因此将负责在返回的对话框上调用该方法onCreateDialog(int id)

一般来说,我会推荐第二种方法,因为您真的不想自己管理对话框的生命周期 - 仅仅是因为当您的活动在配置更改等时重新创建时,要正确处理它是相当痛苦的。但是,对于更现代的解决方案,使用片段,您应该考虑将对话框包装在 aDialogFragment中(支持库中还有一个适用于预蜂窝设备的版本)。

于 2013-04-02T08:35:14.440 回答