Android中的DatePickerDialog始终显示先前设置的日期

时间:2014-11-12 06:06:04

标签: android date calendar datepicker datepickerdialog

我在我的应用中执行以下操作:

1.我有两个EditText框。

  1. 点击其中的每一个时,会弹出DatePickerDialog

  2. 我在Datepicker中设置了日期。

  3. 关闭对话框后,日期将在edittext中设置。

  4. 问题如下。

    在datepicker中设置日期后,datepicker始终显示我已设置的日期,而不是当前日期。即如果我将日期设置为2014-09-09,当我再次点击edittext时,datepicker上的日期显示为上述设定日期,而不是当前日期。

    任何人都可以指导我如何逐步解决这个问题。

    我的代码如下:

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.edt_date_from:
            InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(edt_date_to.getWindowToken(), 0);
    
            edt = 1;
            showDialog(DATE_DIALOG_ID);
            break;
        case R.id.edt_date_to:
            getWindow().setSoftInputMode(
                    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
            edt = 2;
    
            showDialog(DATE_DIALOG_ID);
            break;
    }
    
    
    
       @Override
    protected Dialog onCreateDialog(int id) {
    
        switch (id) {
    
        case DATE_DIALOG_ID:
    
            Calendar cal = Calendar.getInstance();
    
            int iDay,
            iMonth,
            iYear;
    
            iDay = cal.get(Calendar.DAY_OF_MONTH);
            iMonth = cal.get(Calendar.MONTH);
            iYear = cal.get(Calendar.YEAR);
            DatePickerDialog dp = new DatePickerDialog(this, pDateSetListener,
                    iYear, iMonth, iDay);
            dp.updateDate(iYear, iMonth, iDay);
    
            return dp;
    
        }
    
        return null;
    
    }
    
    
    
    
      private DatePickerDialog.OnDateSetListener pDateSetListener = new DatePickerDialog.OnDateSetListener() {
    
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            years = year;
            month = monthOfYear;
            day = dayOfMonth;
    
            updateDisplay();
    
        }
    
    };
    
    public void updateDisplay() {
        // TODO Auto-generated method stub
        if (edt == 1) {
            date_frm.setText(new StringBuilder()
    
            .append(day).append("-").append(month + 1).append("-")
                    .append(years).append(" "));
        } else {
            edt_date_to.setText(new StringBuilder()
    
            .append(day).append("-").append(month + 1).append("-")
                    .append(years).append(" "));
        }
    }
    

2 个答案:

答案 0 :(得分:0)

来自docs

  

对于给定id,第一次调用onCreateDialog(int,Bundle)将使用相同的id。此后,对话框将自动保存并恢复。

如果您坚持使用这些已弃用的活动管理对话框而不是DialogFragment,请将重置日期的初始化代码移至onPrepareDialog()

答案 1 :(得分:0)

您可以覆盖活动中的 onCreateDialog() 方法

只需在编辑文本中添加onClick侦听器,并在onClick方法中添加此代码

<强> showDialog(999);

然后

@Override
protected Dialog onCreateDialog(int id) {
    if (id == 999) {
        Date date = new Date();
        int year=date.getYear();
        int month=date.getMonth();
        int day=date.getDay();
        return new DatePickerDialog(this, myDateListener, year, month, day);
    }
    return null;
}

它将完成这项工作......