【问题标题】:Still able to select disabled dates in date picker仍然可以在日期选择器中选择禁用的日期
【发布时间】:2015-12-24 02:54:30
【问题描述】:

我想在 android 中禁用日期选择器的过去日期。 我可以通过使用来做到这一点

dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

这工作正常,日期选择器中的过去日期看起来已禁用。但我仍然可以单击前一个日期并选择它。 如何不让这种情况发生? 下面是我的日期选择器的屏幕截图:-

这是我禁用过去日期的代码:-

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);
        mActivity = new WeakReference<CreateEvent>(
                (CreateEvent) getActivity());

        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);

        if(callingView==fromDate){
            dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
        }else if (callingView==toDate){
            dialog.getDatePicker().setMinDate(fromD);
        }

        // Create a new instance of DatePickerDialog and return it
        return dialog;
    }

【问题讨论】:

  • 是lolipop的bug,低版本可以查看。对于解决方案,您需要将您的逻辑应用于onDateSet 方法的回调。

标签: android date datepicker android-datepicker


【解决方案1】:

从评论中得知这是 Lollipop 中的一个错误。所以,以编程方式修复它。

您需要做的就是检查所选日期和最小日期设置。

【讨论】:

    【解决方案2】:

    是的,这是一个错误,您需要使用 java 代码检查所选日期。

    过去的日期

    public static boolean validatePastDate(Context mContext,int day,int month,int year){
        final Calendar c = Calendar.getInstance();
        int currentYear = c.get(Calendar.YEAR);
        int currentMonth = c.get(Calendar.MONTH)+1;
        int currentDay = c.get(Calendar.DAY_OF_MONTH);
        if (day > currentDay && year == currentYear && month == currentMonth) {
            Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show();
            return false;
        } else if (month > currentMonth && year == currentYear) {
            Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show();
            return false;
        } else if (year > currentYear) {
            Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show();
            return false;
        }
    
        return true;
    }
    

    未来日期

    public static boolean validateFutureDate(Context mContext,int day,int month,int year){
        final Calendar c = Calendar.getInstance();
        int currentYear = c.get(Calendar.YEAR);
        int currentMonth = c.get(Calendar.MONTH)+1;
        int currentDay = c.get(Calendar.DAY_OF_MONTH);
        if (day < currentDay && year == currentYear && month == currentMonth) {
            Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show();
            return false;
        } else if (month < currentMonth && year == currentYear) {
            Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show();
            return false;
        } else if (year < currentYear) {
            Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show();
            return false;
        }
    
        return true;
    }
    

    只需在此方法中传递选定的日期月份,年份,将返回布尔值。

    【讨论】:

      【解决方案3】:
      datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
      

      【讨论】:

      • 这正是问题所在。这段代码没有正常工作。
      【解决方案4】:

      要解决 Android Lollipop 的错误,您可以验证日期如下:

          int mYear,mMonth,mDay;
          Calendar mcurrentDate = Calendar.getInstance();
          mYear = mcurrentDate.get(Calendar.YEAR);
          mMonth = mcurrentDate.get(Calendar.MONTH);
          mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH);
      
      
          DatePickerDialog mDatePicker = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() {
              public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
              // TODO Auto-generated method stub
      
              // validate here with condition to avoid to select past dates 
                  if (selectedyear == mYear && (selectedmonth+1) == mMonth+1) {
                      if(selectedday < mDay){
                          Toast.makeText(context, "invalid date", Toast.LENGTH_LONG).show();
                          return;
                      }
                  }
      
      
                      textview.setText(selectedday + "/" + (selectedmonth+1) + "/" + selectedyear);
      
              }
          }, mYear, mMonth, mDay);
      
          mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
          if(!mDatePicker.isShowing()){
              mDatePicker.show();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2020-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多