背景:根据时间段做搜索功能,点击某控件弹窗进行选择年、月、日、时、分,选择完成后点击确认按钮得到两个控件内的值拼装成时间。当DatePicker和TimePicker两个控件的输入框进行编辑时,点击确定按钮后会得不到输入的实际值,只有在点击加或减两个按钮才能得到输入框内改变的值。
解决方案:只需在确认按钮的点击事件中,获取DatePicker和TimePicker这两个控件的数值前clear掉焦点,再进行获取即可得到编辑或点击加、减按钮更改后的数值。
截图如下:
实现代码如下:
private Dialog mDialog;
private DatePicker date_picker;
private TimePicker time_picker;
private Button btn; // 保存选择的时间
private int my_year, my_month, my_day, my_hour, my_minute;
private Calendar calendar;
/**
* 编辑时间
*
* @param tView 被点击的文本框
* @param date 不为Null时,初始化的时间控件以该参数的时间来进行初始化
*/
void showDatePopupWindow(final View tView, Date date) {
mDialog = new Dialog(this);
mDialog.setContentView(R.layout.popupwindow_date_view);
mDialog.setTitle("编辑时间");
mDialog.hide();
date_picker = (DatePicker) mDialog.findViewById(R.id.datepicker);
time_picker = (TimePicker) mDialog.findViewById(R.id.timepicker);
btn = (Button) mDialog.findViewById(R.id.btn);
// 设置时间格式为24小时
time_picker.setIs24HourView(true);
// 设置时间为中国
calendar = Calendar.getInstance(Locale.CHINA);
/* 如果传递过来的时间不为null,则从这个时间里获取 */
if (date != null) calendar.setTime(date);
// 获取日期
my_year = calendar.get(Calendar.YEAR);
my_month = calendar.get(Calendar.MONTH);
my_day = calendar.get(Calendar.DAY_OF_MONTH);
my_hour = calendar.get(Calendar.HOUR_OF_DAY);
my_minute = calendar.get(Calendar.MINUTE);
// 日历控件
date_picker.init(my_year, my_month, my_day,
new OnDateChangedListener() {
// 日期修改的单击事件
@Override
public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
my_year = year;
my_month = monthOfYear;
my_day = dayOfMonth;
}
});
// 为时间控件添加事件
time_picker.setCurrentHour(my_hour);
time_picker.setCurrentMinute(my_minute);
time_picker.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
my_hour = hourOfDay;
my_minute = minute;
}
});
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*关键代码,执行这两句后可获取到最后编辑的数值*/
date_picker.clearFocus();
time_picker.clearFocus();
mDialog.dismiss();
((TextView) tView).setText(my_year + "-"+ addZero(my_month + 1) + "-" + addZero(my_day) + " "+ addZero(my_hour) + ":" + addZero(my_minute));
}
});
mDialog.show();
}
/**
* 为日期小于10的添加0
*
* @param num
* @return
*/
public String addZero(int num) {
String str = null;
if (num < 10) {
str = "0" + num;
} else {
str = "" + num;
}
return str;
}