【问题标题】:How to do Android datepicker To date greater than from date validation如何做Android datepicker To date 大于 from date 验证
【发布时间】:2018-04-29 21:59:06
【问题描述】:

我有两个 DatePicker。一个带有 From 日期,另一个带有 To 日期。我想要 根据 From date selection 显示 To date 总是大于 from date 。我正在使用 Android 默认日期选择器,并希望禁用过去 TO datepicker 的日期,如果它大于 From 日期,反之亦然。我知道 这个话题在这里被问过很多次。但是,我无法让我的代码工作 喜欢建议的解决方案,所以请帮忙?

Calendar calendarOne = Calendar.getInstance();


     datePickerFrom= new DatePickerDialog(getActivity(), new  
     DatePickerDialog.OnDateSetListener() { 

     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, 
     int dayOfMonth) {
        StringBuilder selectedDate = new 
    StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
    1).append("-").append(year);
     fromText.setText(selectedDate);
     fromText.setTextColor(android.graphics.Color.BLACK);
    } 

  }, calendarOne.get(Calendar.YEAR), calendarOne.get(Calendar.MONTH), 
     calendarOne.get(Calendar.DAY_OF_MONTH));

 fromText.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View view) {
        datePickerFrom.getDatePicker().setMaxDate(new 
     Date().getTime()); 
        datePickerFrom.show(); 
    } 
}); 


  Calendar calendarTwo = Calendar.getInstance();
  datePickerTo = new DatePickerDialog(getActivity(), new 
  DatePickerDialog.OnDateSetListener() {
    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int 
    dayOfMonth) {
        StringBuilder selectedDate = new 
   StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
   1).append("-").append(year);
        toText.setText(selectedDate);
        toText.setTextColor(android.graphics.Color.BLACK);
      } 
   }, calendarTwo.get(Calendar.YEAR), calendarTwo.get(Calendar.MONTH), 
   calendarTwo.get(Calendar.DAY_OF_MONTH));

   toText.setOnClickListener(new View.OnClickListener() {
    @Override 
    public void onClick(View view) {
       datePickerTo.getDatePicker().setMaxDate(new Date().getTime()); 
       datePickerTo.show(); 
      } 
    }); 
   } 

....................... 更新代码

    final Calendar calendarOne = Calendar.getInstance();
    datePickerFrom= new DatePickerDialog(getActivity(), new
            DatePickerDialog.OnDateSetListener()
            {
                @RequiresApi(api = Build.VERSION_CODES.N)
                @Override
                public void onDateSet(DatePicker view, int year, final int 
    monthOfYear, int dayOfMonth)
                {
                    StringBuilder selectedDate = new
                            StringBuilder().append(dayOfMonth).append("-
      ").append(monthOfYear + 1).append("-").append(year);
                  fromText.setText(selectedDate);
                  fromText.setTextColor(android.graphics.Color.BLACK);

                    Calendar calendarTwo = Calendar.getInstance();
                   datePickerTo = new DatePickerDialog(getActivity());


    datePickerTo.getDatePicker().setMinDate(calendarOne.getTimeInMillis());

                   datePickerTo = new DatePickerDialog(activity, new 
   DatePickerDialog.OnDateSetListener() {

                        @Override
                        public void onDateSet(DatePicker view, int year, int 
    month, int dayOfMonth) {
                            StringBuilder selectedDate = new 
    StringBuilder().append(dayOfMonth).append("-").append(monthOfYear + 
    1).append("-").append(year);
                              toText.setText(selectedDate);

   toText.setTextColor(android.graphics.Color.BLACK);
                        }
                    }, calendarTwo.get(Calendar.YEAR), 
   calendarTwo.get(Calendar.MONTH),
                        calendarTwo.get(Calendar.DAY_OF_MONTH));

                      toText.setOnClickListener(new View.OnClickListener()
                    {
                        @Override
                        public void onClick(View view)
                        {
                           datePickerTo.getDatePicker().setMaxDate(new 
     Date().getTime());
                           datePickerTo.show();
                        }
                    });

                }

            }, calendarOne.get(Calendar.YEAR), 
      calendarOne.get(Calendar.MONTH),
            calendarOne.get(Calendar.DAY_OF_MONTH));

   fromText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            datePickerFrom.getDatePicker().setMaxDate(new
                    Date().getTime());
            datePickerFrom.show();
        }
    });

【问题讨论】:

    标签: android date datepicker calendar


    【解决方案1】:

    首先在 onCreate 之前在你的类中声明以下内容:

    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;
    

    然后在你的 onCreate 方法中添加以下代码:

    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);
                //etFromDate.setText(fromDate);
                toDatePicker.getDatePicker().setMinDate(fromDateCalendar.getTimeInMillis());
            }
    
        };
    
        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);
                //etToDate.setText(toDate);
            }
    
        };
    
        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));
    

    下一步是当您想在单击按钮时显示 datePicker 或在您想显示日期选择器的地方编辑文本时,请使用以下行显示:

    fromDatePicker.show();
    toDatePicker.show();
    

    如果您想在任何地方(如 textView 或 editText)显示所选日期,也可以使用字符串 fromDate 和 toDate 来显示它们。

    【讨论】:

    • 评论不用于扩展讨论;这个对话是moved to chat
    • 有谁能帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 2023-03-26
    • 2013-07-23
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-12-28
    相关资源
    最近更新 更多