上一篇文章实现的是开始结束日期的日期选择器,此篇跟上一篇大同小异,布局界面和Activity类似,在此就不展示,如有想看,可以浏览http://blog.youkuaiyun.com/dimudan2015/article/details/70045724。写这篇博客,主要想提醒大家注意细节问题,前前后后折腾了我半天时间,希望大家不要重复我的错误。
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import com.xly.pms.R;
public class TimePickerDailogUtil implements OnTimeChangedListener{
private TimePicker startTimePicker;
private TimePicker endTimePicker;
private AlertDialog ad;
private String dateTime;
private String initStartTime;
private String initEndTime;
private Activity activity;
/**
* 日期弹出选择框构造函数
* @param activity :调用的父activity
* @param initStartDate 初始开始日期值
* @param initEndDate 初始结束日期值
*/
public TimePickerDailogUtil(Activity activity, String initStartTime, String initEndTime) {
this.activity = activity;
this.initStartTime = initStartTime;
this.initEndTime = initEndTime;
}
public void init(TimePicker startTimePicker, TimePicker endTimePicker) {
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
if (!(null == initStartTime || "".equals(initStartTime)) && !(null == initEndTime || "".equals(initEndTime))) {
calendar1 = this.getCalendarByInintData(initStartTime);
calendar2 = this.getCalendarByInintData(initEndTime);
} else {
initStartTime = calendar1.get(Calendar.HOUR_OF_DAY) + "时"
+ calendar1.get(Calendar.MINUTE);
initEndTime = calendar2.get(Calendar.HOUR_OF_DAY) + "时"
+ calendar2.get(Calendar.MINUTE);
}
startTimePicker.setCurrentHour(calendar1.get(Calendar.HOUR_OF_DAY));
startTimePicker.setCurrentMinute(calendar1.get(Calendar.MINUTE));
endTimePicker.setCurrentHour(calendar2.get(Calendar.HOUR_OF_DAY));
endTimePicker.setCurrentMinute(calendar2.get(Calendar.MINUTE));
}
/**
* 弹出日期选择框方法
*
* @param inputDate
* :为需要设置的日期时间文本编辑框
* @return
*/
public AlertDialog dateTimePicKDialog(final EditText inputDate) {
LinearLayout dateTimeLayout = (LinearLayout) activity
.getLayoutInflater().inflate(R.layout.time_dialog, null);
startTimePicker = (TimePicker) dateTimeLayout.findViewById(R.id.start_timepicker);
endTimePicker = (TimePicker) dateTimeLayout.findViewById(R.id.end_timepicker);
init(startTimePicker, endTimePicker);
startTimePicker.setIs24HourView(true);
startTimePicker.setOnTimeChangedListener(this);
endTimePicker.setIs24HourView(true);
endTimePicker.setOnTimeChangedListener(this);
ad = new AlertDialog.Builder(activity)
.setTitle("开始结束日期选择")
.setView(dateTimeLayout)
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText(dateTime);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
inputDate.setText("");
}
}).show();
return ad;
}
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// 获得日历实例
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = Calendar.getInstance();
calendar1.set(Calendar.YEAR, Calendar.MONTH,
Calendar.DAY_OF_MONTH, startTimePicker.getCurrentHour(),
startTimePicker.getCurrentMinute());
calendar2.set(Calendar.YEAR, Calendar.MONTH,
Calendar.DAY_OF_MONTH, endTimePicker.getCurrentHour(),
endTimePicker.getCurrentMinute());
SimpleDateFormat sdf = new SimpleDateFormat("HH时mm", Locale.CHINA);
dateTime = sdf.format(calendar1.getTime()) + "-" + sdf.format(calendar2.getTime());
ad.setTitle(dateTime);
}
/**
* 实现将初始时间11:40拆分成 时 分 ,并赋值给calendar
* @param initDateTime 初始日期值 字符串型
* @return Calendar
*/
private Calendar getCalendarByInintData(String initDateTime) {
Calendar calendar = Calendar.getInstance();
// 将初始时间11:40拆分成 时 分
//1.获取时分
String hourStr = spliteString(initDateTime, "时", "index", "front"); // 时
String minuteStr = spliteString(initDateTime, "时", "index", "back"); // 分
int currentHour = Integer.valueOf(hourStr.trim()).intValue();
int currentMinute = Integer.valueOf(minuteStr.trim()).intValue();
//把当前的年月日赋值给calendar对象
//calendar.set(currentYear, currentMonth, currentDay);
calendar.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, currentHour, currentMinute);
return calendar;
}
/**
* 截取子串
* @param srcStr 原字符串
* @param pattern 匹配模式
* @param indexOrLast
* @param frontOrBack
* @return
*/
public static String spliteString(String srcStr, String pattern,
String indexOrLast, String frontOrBack) {
String result = "";
int loc = -1;
if (indexOrLast.equalsIgnoreCase("index")) {
loc = srcStr.indexOf(pattern); // 取得字符串第一次出现的位置
} else {
loc = srcStr.lastIndexOf(pattern); // 最后一个匹配串的位置
}
if (frontOrBack.equalsIgnoreCase("front")) {
if (loc != -1)
result = srcStr.substring(0, loc); // 截取子串
} else {
if (loc != -1)
result = srcStr.substring(loc + 1, srcStr.length()); // 截取子串
}
return result;
}
}
颜色标注的是我犯错的地方,望引起注意,编程主要还是靠细心啊!