我正在使用DatePicker
在我的应用程序中向用户显示日期。
但是,我使用 onCreateDialog 方法向用户显示日期选择器,设置整数变量如下:
static final int DATE_DIALOG_ID = 999;
然后我打电话给下面的方法
的的ShowDialog(DATE_DIALOG_ID);
首次使用当前日期初始化日期选择器。到目前为止,一切都很好。
@Override
protected Dialog onCreateDialog(int id) {
Calendar c = Calendar.getInstance();
final int myear = c.get(Calendar.YEAR);
final int mmonth = c.get(Calendar.MONTH);
final int mday = c.get(Calendar.DAY_OF_MONTH);
Log.d("Executed", "hihihihihihihi");
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
mday) {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
if (year < myear)
view.updateDate(myear, mmonth, mday);
if (monthOfYear < mmonth && year == myear)
view.updateDate(myear, mmonth, mday);
if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
view.updateDate(myear, mmonth, mday);
}
};
return _date;
}
return null;
}
但问题是当我选择除当前日期之外的日期工作。但是当我再次尝试选择日期时,默认情况下日期选择器显示我最后选择的日期。每次日期选择器打开时我无法设置当前日期我怎么能这样做
答案 0 :(得分:0)
尝试使用here中的日期选择器。
在您的活动中添加以下方法和类:
public void showDatePickerDialog() {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
}
}
答案 1 :(得分:0)
private Calendar c;
@Override
onCreate(){
c = Calendar.getInstance();
}
@Override
protected Dialog onCreateDialog(int id) {
final int myear = c.get(Calendar.YEAR);
final int mmonth = c.get(Calendar.MONTH);
final int mday = c.get(Calendar.DAY_OF_MONTH);
Log.d("Executed", "hihihihihihihi");
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth,
mday) {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
/// Here you can set your updated date to calendar instance. So whenever you open it again, it will display last updated date
c.set(year, (monthOfYear- 1), dayOfMonth);
if (year < myear)
view.updateDate(myear, mmonth, mday);
if (monthOfYear < mmonth && year == myear)
view.updateDate(myear, mmonth, mday);
if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
view.updateDate(myear, mmonth, mday);
}
};
return _date;
}
return null;
}
希望它会对你有所帮助!
答案 2 :(得分:0)
(英语不是我的第一语言,请在必要时更正)
我认为你的状况检查是错误的,
if (year < myear)
view.updateDate(myear, mmonth, mday);
if (monthOfYear < mmonth && year == myear)
view.updateDate(myear, mmonth, mday);
if (dayOfMonth < mday && year == myear && monthOfYear == mmonth)
view.updateDate(myear, mmonth, mday);
例如:默认情况下,您将当前日期设置为今天(2016年2月13日)。
第1步:
在datePicker中,默认日期为2016年2月13日。现在您选择前一天(2016年2月12日)
现在,datepicker值变为12/2/2016。
在这种情况下,
if(year&lt; myear)= false
if(monthOfYear&lt; mmonth&amp;&amp; year == myear)= false
if(dayOfMonth&lt; mday&amp;&amp; year == myear&amp;&amp; monthOfYear == mmonth)= true
第2步
现在再次将datepicker日期更改为今天的日期(2016年2月13日)
在这种情况下:
if(year&lt; myear)= false
if(monthOfYear&lt; mmonth&amp;&amp; year == myear)= false
if(dayOfMonth&lt; mday&amp;&amp; year == myear&amp;&amp; monthOfYear == mmonth)= false - 此情况变为false,因为dayOfMonth和mday是相同的。但是你要检查更早的日期。