选择开始结束日期的view

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import android.app.DatePickerDialog;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bjjw.cjgc.R;

public class SelectDateView extends LinearLayout {
    public interface OnButtonClickListener {
        /**
         * @param startDate        开始日期
         * @param endDate        结束日期
         */
        public void onOKClick(String startDate, String endDate);
        public void onCancelClick();
    }
    
    public interface OnStartDateClickListener {
        public void onStartDateClick();
    }
    
    public interface OnEndDateClickListener {
        public void onEndDateClick();
    }
    
    private OnButtonClickListener buttonClickListener = null;
    private OnStartDateClickListener onStartDateClickListener = null;
    private OnEndDateClickListener onEndDateClickListener = null;
    
    private Context context;
    
    private TextView selectDate;
    private TextView selectDateEnd;
    private Button commit;
    private Button cancel;
    // private int selectYear;
    // private int selectMonth;
    // private int selectDay;
    private DatePickerDialog datePicker;
    private DatePickerDialog datePickerEnd;

    private Date dateE;
    private Date dateS;
    private Date now;
    private Calendar calendar;
    private SimpleDateFormat sdf;

    private String startDate;
    private String endDate;

    private DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // selectYear = year;
            // selectMonth = monthOfYear;
            // selectDay = dayOfMonth;

            dateS.setYear(year - 1900);
            dateS.setMonth(monthOfYear);
            dateS.setDate(dayOfMonth);

//            startDate = getDateString(year, monthOfYear, dayOfMonth);
//            selectDate.setText(startDate);
            
            calendar.set(year, monthOfYear, dayOfMonth);
            Date date = calendar.getTime();

            selectDate.setText(sdf.format(date));
            
            startDate = sdf.format(date);
        }
    };

    private DatePickerDialog.OnDateSetListener listenerEnd = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                int dayOfMonth) {
            // selectYear = year;
            // selectMonth = monthOfYear;
            // selectDay = dayOfMonth;

            dateE.setYear(year - 1900);
            dateE.setMonth(monthOfYear);
            dateE.setDate(dayOfMonth);
            
            calendar.set(year, monthOfYear, dayOfMonth);
            Date date = calendar.getTime();

            selectDateEnd.setText(sdf.format(date));

            calendar.add(Calendar.DAY_OF_YEAR, 1);
            date = calendar.getTime();
            endDate = sdf.format(date);
        }
    };

    public SelectDateView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init(context);
    }

    public SelectDateView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }

    public SelectDateView(Context context) {
        super(context);
        init(context);
    }

    private void init(Context context) {
        this.context = context;
        View contentView = LayoutInflater.from(context).inflate(R.layout.select_date_view, this);

        selectDate = (TextView) contentView.findViewById(R.id.date);
        selectDateEnd = (TextView) contentView.findViewById(R.id.date_end);
        commit = (Button) contentView.findViewById(R.id.commit);
        cancel = (Button) contentView.findViewById(R.id.cancel);

        dateE = new Date();
        dateS = new Date();
        calendar = Calendar.getInstance();
        now = calendar.getTime();
        sdf = new SimpleDateFormat("yyyy-MM-dd");

        int selectYear = calendar.get(Calendar.YEAR);
        int selectMonth = calendar.get(Calendar.MONTH);
        int selectDay = calendar.get(Calendar.DAY_OF_MONTH);

        datePicker = new DatePickerDialog(context, listener,
                selectYear, selectMonth, selectDay);
        datePickerEnd = new DatePickerDialog(context, listenerEnd,
                selectYear, selectMonth, selectDay);

        String btnText = sdf.format(now);
        endDate = btnText;
        startDate = btnText;

        selectDate.setText(btnText);
        selectDate.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                datePicker.show();
                // 可以在下面的代码设置自定义的日期选择组件
//                if (null != onStartDateClickListener) {
//                    onStartDateClickListener.onStartDateClick();
//                }
            }
        });

        selectDateEnd.setText(btnText);
        selectDateEnd.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                datePickerEnd.show();
                // 可以在下面的代码设置自定义的日期选择组件
//                if (null != onEndDateClickListener) {
//                    onEndDateClickListener.onEndDateClick();
//                }
            }
        });

        commit.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                errorSelect();
            }
        });
        
        cancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (null != buttonClickListener) {
                    buttonClickListener.onCancelClick();
                }
            }
        });
    }

    private String getDateString(int year, int month, int day) {
        return year + "-" + (month + 1) + "-" + day;
    }

    /**
     * 2014-09-12
     * 2014-09-28
     * 判断日期选择是否正确
     */
    private void errorSelect() {
        String text = "";
        String startError = "开始时间请选择不超过结束时间的日期";
        String endError = "结束时间请选择不超过今天的日期";

        try {
            dateE = new SimpleDateFormat("yyyy-MM-dd").parse(selectDateEnd.getText().toString());
            dateS = new SimpleDateFormat("yyyy-MM-dd").parse(selectDate.getText().toString());
        } catch (ParseException e) {
            Toast.makeText(context, "日期格式不正确", Toast.LENGTH_LONG).show();
            return;
        }
        
        if (dateE.compareTo(now) > 0) {
//            text = endError;
            text="";
        }

        if (dateS.compareTo(dateE) > 0) {
            if (!"".equals(text)) {
                text += ", " + startError;
            } else {
                text = startError;
            }
        }

        if (!"".equals(text)) {
            Toast.makeText(context, text, Toast.LENGTH_LONG).show();
        } else {
            if (null != buttonClickListener) {
                buttonClickListener.onOKClick(selectDate.getText().toString(), selectDateEnd.getText().toString());
            }
        }
    }
    
    public TextView getSelectDate() {
        return selectDate;
    }

    public TextView getSelectDateEnd() {
        return selectDateEnd;
    }

    public void setOnButtonClickListener(OnButtonClickListener buttonClickListener) {
        this.buttonClickListener = buttonClickListener;
    }

    public void setOnStartDateClickListener(
            OnStartDateClickListener onStartDateClickListener) {
        this.onStartDateClickListener = onStartDateClickListener;
    }

    public void setOnEndDateClickListener(
            OnEndDateClickListener onEndDateClickListener) {
        this.onEndDateClickListener = onEndDateClickListener;
    }
}

 

posted @ 2015-11-26 16:57  安谧世界  阅读(262)  评论(0编辑  收藏  举报