DatePicker和TimePicker获得编辑框内内容

背景:根据时间段做搜索功能,点击某控件弹窗进行选择年、月、日、时、分,选择完成后点击确认按钮得到两个控件内的值拼装成时间。当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;
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值