时间选择器(二)

上一篇文章实现的是开始结束日期的日期选择器,此篇跟上一篇大同小异,布局界面和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;    
    } 

}


颜色标注的是我犯错的地方,望引起注意,编程主要还是靠细心啊!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值