我创建了一个自定义数据选择器,其中显示 1950 年至 2016 年的年份。
现在,当我第一次打开选择器时,我想设置当天的当前数据。但我无法将其设置为当前数据。第一次启动后,它的工作原理与我希望的完全一样。
这是我迄今为止尝试过的代码
private void openDatePicker(int month, int day, int year) {
try {
Log.e("calender", "MONTH = " + month);
Log.e("calender", "DAY_OF_WEEK = " + day);
Log.e("calender", "YEAR = " + year);
m_calendar.set(Calendar.DAY_OF_MONTH, month);
m_calendar.set(Calendar.MONTH, day);
m_calendar.set(Calendar.YEAR, year);
int p_minYear, p_minMonth, p_minDay;
int p_maxYear, p_maxMonth, p_maxDay;
p_minDay = 1;
p_minMonth = 0;
p_minYear = 1950;
p_maxDay = 31;
p_maxMonth = 11;
p_maxYear = 2016;
Calendar m_maxDateCalendar = Calendar.getInstance();
m_maxDateCalendar.set(Calendar.YEAR, p_maxYear);
m_maxDateCalendar.set(Calendar.MONTH, p_maxMonth);
m_maxDateCalendar.set(Calendar.DAY_OF_MONTH, p_maxDay);
Calendar m_minDateCalendar = Calendar.getInstance();
m_minDateCalendar.set(Calendar.YEAR, p_minYear);
m_minDateCalendar.set(Calendar.MONTH, p_minMonth);
m_minDateCalendar.set(Calendar.DAY_OF_MONTH, p_minDay);
new YearPicker(m_context, m_datePickerListener, m_minDateCalendar,
m_maxDateCalendar, m_calendar).show();
} catch (Throwable p_e) {
// Have suppressed the exception
p_e.printStackTrace();
}
}
这是我用于年份选择器的课程YearPicker.Java
public class YearPicker extends DatePickerDialog {
private int maxYear = 0;
private int maxMonth = 0;
private int maxDay = 0;
private int minYear = 0;
private int minMonth = 0;
private int minDay = 0;
private Calendar m_minDateCalendar, m_maxDateCalendar, m_calendar;
private boolean m_fired = false;
public YearPicker(Context context, OnDateSetListener callBack,
Calendar p_minCalendar, Calendar p_maxCalendar,
Calendar p_currentCalendar) {
super(context, callBack, p_currentCalendar.get(Calendar.YEAR),
p_currentCalendar.get(Calendar.MONTH), p_currentCalendar
.get(Calendar.DAY_OF_MONTH));
m_minDateCalendar = (Calendar) p_minCalendar.clone();
m_maxDateCalendar = (Calendar) p_maxCalendar.clone();
m_calendar = (Calendar) p_currentCalendar.clone();
// m_calendar = p_currentCalendar;
Log.e("m_calendar", "=> " + m_calendar.get(Calendar.MONDAY));
Log.e("m_calendar", "=> " + m_calendar.get(Calendar.DAY_OF_WEEK));
Log.e("m_calendar", "=> " + m_calendar.get(Calendar.YEAR));
this.minDay = m_minDateCalendar.get(Calendar.DAY_OF_MONTH);
this.minMonth = m_minDateCalendar.get(Calendar.MONTH);
this.minYear = m_minDateCalendar.get(Calendar.YEAR);
this.maxDay = m_maxDateCalendar.get(Calendar.DAY_OF_MONTH);
this.maxMonth = m_maxDateCalendar.get(Calendar.MONTH);
this.maxYear = m_maxDateCalendar.get(Calendar.YEAR);
try {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
m_fired = false;
this.getDatePicker().setMaxDate(
m_maxDateCalendar.getTime().getTime());
this.getDatePicker().setMinDate(
m_minDateCalendar.getTime().getTime());
} else {
m_fired = true;
}
} catch (Throwable p_e) {
Log.d("m_maxDateCalendar", ""
+ m_maxDateCalendar.getTime().getTime());
Log.d("m_minDateCalendar", ""
+ m_minDateCalendar.getTime().getTime());
Log.d("m_calendar", "" + m_calendar.getTime().getTime());
p_e.printStackTrace();
}
}
@Override
public void onDateChanged(DatePicker p_view, int p_year, int p_monthOfYear,
int p_dayOfMonth) {
super.onDateChanged(p_view, p_year, p_monthOfYear, p_dayOfMonth);
if (m_fired) {
m_calendar.set(Calendar.YEAR, p_year);
m_calendar.set(Calendar.MONTH, p_monthOfYear);
m_calendar.set(Calendar.DAY_OF_MONTH, p_dayOfMonth);
if (m_calendar.after(m_maxDateCalendar)) {
m_fired = true;
if (maxMonth > 11) {
maxMonth = 11;
}
p_view.updateDate(maxYear, maxMonth, maxDay);
} else if (m_calendar.before(m_minDateCalendar)) {
m_fired = true;
if (minMonth > 11) {
minMonth = 11;
}
p_view.updateDate(minYear, minMonth, minDay);
} else {
m_fired = true;
p_view.updateDate(p_year, p_monthOfYear, p_dayOfMonth);
}
}
}
}
我现在想要什么
我想设置选择器第一次打开时的当前日期。
e.g!如果用户想要选择日期,那么他最初将不会选择日期。但是当他单击日期部分时,系统会提示他使用日期选择器。那时我想设置当天的当前日期。谢谢并请帮忙。