packagecom.example.doubledatepicker;importjava.lang.reflect.Field;importandroid.app.AlertDialog;importandroid.content.Context;importandroid.content.DialogInterface;importandroid.content.DialogInterface.OnClickListener;importandroid.os.Bundle;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.widget.DatePicker;importandroid.widget.DatePicker.OnDateChangedListener;public class DoubleDatePickerDialog extends AlertDialog implementsOnClickListener, OnDateChangedListener {private static final String START_YEAR = "start_year";private static final String END_YEAR = "end_year";private static final String START_MONTH = "start_month";private static final String END_MONTH = "end_month";private static final String START_DAY = "start_day";private static final String END_DAY = "end_day";private final DatePicker mDatePicker_start; //开始
private finalOnDateSetListener mCallBack;public interfaceOnDateSetListener {void onDateSet(DatePicker startDatePicker, int startYear, int startMonthOfYear, intstartDayOfMonth);
}public DoubleDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, intdayOfMonth) {this(context, 0, callBack, year, monthOfYear, dayOfMonth);
}public DoubleDatePickerDialog(Context context, int theme, OnDateSetListener callBack, int year, intmonthOfYear,intdayOfMonth) {this(context, 0, callBack, year, monthOfYear, dayOfMonth, true);
}public DoubleDatePickerDialog(Context context, int theme, OnDateSetListener callBack, int year, intmonthOfYear,int dayOfMonth, booleanisDayVisible) {super(context, theme);
mCallBack=callBack;
Context themeContext=getContext();
setButton(BUTTON_POSITIVE,"确 定", this);
setButton(BUTTON_NEGATIVE,"取 消", this);
setIcon(0);
LayoutInflater inflater=(LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view= inflater.inflate(R.layout.date_picker_dialog, null);
setView(view);
mDatePicker_start=(DatePicker) view.findViewById(R.id.datePickerStart);
mDatePicker_start.init(year, monthOfYear, dayOfMonth,this);if (!isDayVisible) {
hidDay(mDatePicker_start);
}
}/*** 隐藏DatePicker中的日期显示
*
*@parammDatePicker*/
private voidhidDay(DatePicker mDatePicker) {
Field[] datePickerfFields=mDatePicker.getClass().getDeclaredFields();for(Field datePickerField : datePickerfFields) {if ("mDaySpinner".equals(datePickerField.getName())) {
datePickerField.setAccessible(true);
Object dayPicker= newObject();try{
dayPicker=datePickerField.get(mDatePicker);
}catch(IllegalAccessException e) {
e.printStackTrace();
}catch(IllegalArgumentException e) {
e.printStackTrace();
}
((View) dayPicker).setVisibility(View.GONE);
}
}
}public void onClick(DialogInterface dialog, intwhich) {if (which ==BUTTON_POSITIVE)
tryNotifyDateSet();
}
@Overridepublic void onDateChanged(DatePicker view, int year, int month, intday) {if (view.getId() ==R.id.datePickerStart)
mDatePicker_start.init(year, month, day,this);
}/*** 获得开始日期的DatePicker
*
*@returnThe calendar view.*/
publicDatePicker getDatePickerStart() {returnmDatePicker_start;
}public void updateStartDate(int year, int monthOfYear, intdayOfMonth) {
mDatePicker_start.updateDate(year, monthOfYear, dayOfMonth);
}public void updateEndDate(int year, int monthOfYear, intdayOfMonth) {
}private voidtryNotifyDateSet() {if (mCallBack != null) {
mDatePicker_start.clearFocus();
mCallBack.onDateSet(mDatePicker_start, mDatePicker_start.getYear(), mDatePicker_start.getMonth(),
mDatePicker_start.getDayOfMonth());
}
}
@Overrideprotected voidonStop() {super.onStop();
}
@OverridepublicBundle onSaveInstanceState() {
Bundle state= super.onSaveInstanceState();
state.putInt(START_YEAR, mDatePicker_start.getYear());
state.putInt(START_MONTH, mDatePicker_start.getMonth());
state.putInt(START_DAY, mDatePicker_start.getDayOfMonth());returnstate;
}
@Overridepublic voidonRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);int start_year =savedInstanceState.getInt(START_YEAR);int start_month =savedInstanceState.getInt(START_MONTH);int start_day =savedInstanceState.getInt(START_DAY);
mDatePicker_start.init(start_year, start_month, start_day,this);int end_year =savedInstanceState.getInt(END_YEAR);int end_month =savedInstanceState.getInt(END_MONTH);int end_day =savedInstanceState.getInt(END_DAY);
}
}