【问题标题】:Date picker dialog not showing selected date when dialog reopened重新打开对话框时,日期选择器对话框未显示所选日期
【发布时间】:2015-12-08 09:26:54
【问题描述】:

我正在开发日期选择器对话框 android。我能够显示选定的日期并且一切正常,但是当我选择一个日期,点击确定然后重新打开对话框时,指针会回到最小日期,但不是选定的日期。我想让它显示最后选择的日期。

我该如何解决这个问题?

这会在用户点击时打开对话框

public void show() {
    Calendar now = Calendar.getInstance();
    DatePickerDialog dpd = DatePickerDialog.newInstance(
          PostInfoUpdate.this,
          now.get(Calendar.YEAR),
          now.get(Calendar.MONTH),
          now.get(Calendar.DAY_OF_MONTH)
    );

    dpd.setMinDate(Calendar.getInstance());
    now.add(Calendar.DAY_OF_MONTH, 30);
    dpd.setMaxDate(now);
    dpd.show(getFragmentManager(), "Datepickerdialog");
}

这是回调方法

@Override
public void onResume() {
    super.onResume();
    DatePickerDialog dpd
        = (DatePickerDialog) getFragmentManager().findFragmentByTag("Datepickerdialog");

    if(dpd != null) {
        dpd.setOnDateSetListener(this);
    }
}

public void setOnDateSetListener(DatePickerDialog.OnDateSetListener listener) {
        mCallBack = listener;
    }

这是我设置日期的地方

 @Override
 public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
     String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year;
     dateTextView.setText(date);
 }

【问题讨论】:

    标签: java android datepicker dialog


    【解决方案1】:

    当您调用show 方法时,您正在创建Calender 对象的新实例并将其传递给DatePicker。因此它将始终显示当前日期。如果您希望显示所选日期,则拥有一个全局日历对象并将其传递给 datePicker,并在 onDateSet 中继续更新它。如下所示:

    //Global variable, you can initialize inside OnCreate Method 
    Calendar now = Calendar.getInstance();
    
    public void show() {
    
    DatePickerDialog dpd = DatePickerDialog.newInstance(
          PostInfoUpdate.this,
          now.get(Calendar.YEAR),
          now.get(Calendar.MONTH),
          now.get(Calendar.DAY_OF_MONTH)
    );
    
    dpd.setMinDate(Calendar.getInstance());
    now.add(Calendar.DAY_OF_MONTH, 30);
    dpd.setMaxDate(now);
    dpd.show(getFragmentManager(), "Datepickerdialog");
    }
    
    
    @Override
    public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
     String date = "You picked the following date: "+dayOfMonth+"/"+(++monthOfYear)+"/"+year;
     dateTextView.setText(date);
     now.set(Calendar.YEAR, year);
     now.set(Calendar.MONTH, monthOfYear);
     now.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    }
    

    【讨论】:

    • 你能举个例子吗?
    • 在我更新的答案中添加了一个代码示例,请检查。
    • 您好,我使用 joda time 来获取当前日期和时间,而不是使用日历。第二次重新打开后如何让日期选择器设置选定的值?
    • 选择日期时,只需更新 joda 时间对象并在打开日期选择器时重新使用相同的对象。请给我一些代码以获得更多解释。
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多