在Android中使用DatePicker时遇到问题

时间:2013-09-12 09:34:52

标签: android android-dialog android-datepicker

我使用以下代码实现了DatePicker对话框:

static final int DATE_PICKER_FROM = 0;
DatePickerDialog.OnDateSetListener from_dateListener;
private EditText editDateStart;
...
private void addListenersToButtons(){
    editDateStart = (EditText)findViewById(R.id.editDateStart);

    editDateStart.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            showDialog(DATE_PICKER_FROM);
        }
    });
}

@Override
protected Dialog onCreateDialog(int id) {
    // TODO Auto-generated method stub
    switch (id) {
    case DATE_PICKER_FROM:
        return new DatePickerDialog(this, from_dateListener,2,10,2013);
    }
    return null;
}

以下是听众的初始化:

 from_dateListener = new DatePickerDialog.OnDateSetListener() {

            // when dialog box is closed, below method will be called.
            public void onDateSet(DatePicker view, int selectedYear,
                    int selectedMonth, int selectedDay) {
                    int year = selectedYear;
                    int month = selectedMonth;
                    int day = selectedDay;

            editDateStart.setText(
                    new StringBuilder()
                        .append(pad(day)).append("/")
                        .append(pad(month + 1)).append("/")
                        .append(year).append(" "));
            }
        };

单击EditText字段时,对话框显示如下:

enter image description here

所以,我尝试使用代码设置的日期:

DatePickerDialog(this, from_dateListener,2,10,2013);

没有出现。如你所见,日期是1 gen 1900。

当我尝试更改datepicker中的日期时,会出现另一个问题。例如,我已经从1设置为2,结果如下:

enter image description here

日历已经到了2036年2月20日。为什么?

注意:如果我将日期选择器中的年份从1900更改为1901,则日历年更改为2037,但如果我在日期选择器中将日期设置为1902,则日历中的年份将变为1902(依此类推)

2 个答案:

答案 0 :(得分:1)

请阅读DatePickerDialog构造函数的文档。参数如下:

  

public DatePickerDialog (上下文上下文,DatePickerDialog.OnDateSetListener callBack,int year,int monthOfYear,int dayOfMonth)

     

<强>参数

     

context 对话框要运行的上下文。

     

callBack 如何通知家长日期已设置。

     

对话框的第一年。

     

monthOfYear 对话框的初始月份。

     

dayOfMonth 对话框的第一天。

所以电话应该是:

DatePickerDialog(this, from_dateListener, 2013, 10, 2);

答案 1 :(得分:1)

做这样的事情

DatePickerDialog dp = new DatePickerDialog(mContext, datePickerListener, Year, Month, Day);