簡體   English   中英

如何將“日期選擇器”選擇的日期設置為“從日期選擇器”日期的最大日期

[英]How to set “todate picker” selected date as maximum date of “from datepicker” date

我有兩個日期選取器From and To ,在這里,我可以設置From datepicker的值的最小日期to datepicker

現在我的要求是,如果我選擇“ To datepicker選擇To datepicker日期”,我想將其設置為“ From datepicker date最大From datepicker date 我嘗試了一種解決方案,但在我的情況下不起作用。

private String fromDate;
private DatePickerDialog fromDatePicker;
private DatePickerDialog.OnDateSetListener fromDatePickerListener;
private Calendar fromDateCalendar;
private String toDate;
private DatePickerDialog toDatePicker;
private DatePickerDialog.OnDateSetListener toDatePickerListener;
private Calendar toDateCalendar;

Fromdatepicker的OnDateSetListener方法

 fromDateCalendar = Calendar.getInstance(); 
    fromDatePickerListener = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {
        // TODO Auto-generated method stub 
        fromDateCalendar.set(Calendar.YEAR, year);
        fromDateCalendar.set(Calendar.MONTH, monthOfYear);
        fromDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        fromDate = fromDateCalendar.get(Calendar.YEAR) + "-" + 
  (fromDateCalendar.get(Calendar.MONTH)+1) + "-" + 
   fromDateCalendar.get(Calendar.DAY_OF_MONTH);
         textviewFrom.setText(fromDate); 

toDatePicker.getDatePicker().setMinDate(fromDateCalendar.getTimeInMillis()); 
    } 

}; 

要日期選擇器OnDateSetListener方法

 toDateCalendar = Calendar.getInstance();
 toDatePickerListener = new DatePickerDialog.OnDateSetListener() {

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear,
                          int dayOfMonth) {
        // TODO Auto-generated method stub 
        toDateCalendar.set(Calendar.YEAR, year);
        toDateCalendar.set(Calendar.MONTH, monthOfYear);
        toDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

        toDate = toDateCalendar.get(Calendar.YEAR) + "-" + 
 (toDateCalendar.get(Calendar.MONTH)+1) + "-" + 
  toDateCalendar.get(Calendar.DAY_OF_MONTH);
        textviewTo.setText(toDate); 
todatepicker.getDatePicker().setMinDate(-2208902400000L);
fromdatePicker.getDatePicker().setMaxDate(toDateCalendar.getTimeInMillis());

    } 

 }; 


toDatePicker = new DatePickerDialog(getContext(),toDatePickerListener, 
toDateCalendar.get(Calendar.YEAR), toDateCalendar.get(Calendar.MONTH), 
toDateCalendar.get(Calendar.DAY_OF_MONTH));

fromDatePicker = new DatePickerDialog(getContext(),fromDatePickerListener, 
fromDateCalendar.get(Calendar.YEAR), fromDateCalendar.get(Calendar.MONTH), 
fromDateCalendar.get(Calendar.DAY_OF_MONTH));

呼叫日期選擇器對話框的Textview列表器

textviewFrom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            fromDatePicker.show();
        }
    });
    textviewTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {


            toDatePicker.show();
        }
    });

我試過了

fromDatePicker.getDatePicker().setMaxDate(toDateCalendar.get‌​TimeInMillis()); 

在toDatePickerListener的onDateSet方法中,但是不起作用

我嘗試了以下方法,希望對您有所幫助。

 private String selectedToDate = "";
 private String selectedFromDate = "";
 private Calendar calToDate, calFromDate;

在onCreate()方法中編寫此代碼

calFromDate = convertToCalender(selectedFromDate);
calToDate = convertToCalender(selectedToDate);

Todate和FromDate TextView點擊

textviewFrom.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

             showFromDatePicker(fromdateListener, calFromDate, calToDate);
        }
    });
textviewTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            showToDatePicker(todateListener, calToDate, calFromDate);
        }
    });

toDate和fromDate偵聽器

 public DatePickerDialog.OnDateSetListener fromdateListener =
            new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                                      int dayOfMonth) {
                    calFromDate.set(year, monthOfYear, dayOfMonth);
                    selectedFromDate = returnFormattedDate(calFromDate.getTimeInMillis());
                    textviewFrom.setText(selectedFromDate);
                }
            };

    DatePickerDialog.OnDateSetListener todateListener =
            new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear,
                                      int dayOfMonth) {
                    calToDate.set(year, monthOfYear, dayOfMonth);
                    selectedToDate = returnFormattedDate(calToDate.getTimeInMillis());
                    textviewTo.setText(selectedToDate);
                }
};
private  String returnFormattedDate(long timeInMilliSec) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd",
                Locale.getDefault());
        return dateFormat.format(new Date(timeInMilliSec));
}

顯示DatePicker的方法

private void showFromDatePicker(DatePickerDialog.OnDateSetListener listener,
                                Calendar calendar,
                                Calendar minDateCalender) {
        DatePickerDialog dialog = new DatePickerDialog(getActivity(),
                listener,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
        if (minDateCalender != null) {
            dialog.getDatePicker().setMinDate(minDateCalender.getTimeInMillis());
        }
        dialog.show();
    }

private void showToDatePicker(DatePickerDialog.OnDateSetListener listener,
                                Calendar calendar,
                                Calendar maxDateCalender) {
        DatePickerDialog dialog = new DatePickerDialog(getActivity(),
                listener,
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH));
       dialog.getDatePicker().setMaxDate(maxDateCalender.getTimeInMillis());

        dialog.show();
    }

將字符串日期轉換為日歷的方法

private Calendar convertToCalender(String date) {
        Calendar mCalender = Calendar.getInstance();
        if (date == null) {
            return mCalender;
        } else {
            try {
                DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                Date returnDate = formatter.parse(date);
                mCalender = Calendar.getInstance();
                mCalender.setTime(returnDate);
                return mCalender;
            } catch (ParseException e) {
                e.printStackTrace();
                return mCalender;
            }
        }
}

如果您正在xml中使用DatePicker小部件,則將可以使用以下內容。

toDatePickerListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            toDateCalendar.set(Calendar.YEAR, year);
            toDateCalendar.set(Calendar.MONTH, monthOfYear);
            toDateCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);

            toDate = toDateCalendar.get(Calendar.YEAR) + "-" +
                    (toDateCalendar.get(Calendar.MONTH)+1) + "-" +
                    toDateCalendar.get(Calendar.DAY_OF_MONTH);
            fromdatePicker.setMaxDate(toDateCalendar.getTimeInMillis());
            //etToDate.setText(toDate);
        }

    };

或者,如果您一次打開DatePickerDialog。 然后,您應該保存先前選擇的日期,並將其傳遞給下一個DatePickerDialog,然后再調用show。

pickerDialog.getDatePicker().setMaxDate(maxTime);// Set Max and min here
pickerDialog.show();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM