Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 仍然能够在日期选择器中选择禁用的日期_Android_Date_Datepicker_Android Datepicker - Fatal编程技术网

Android 仍然能够在日期选择器中选择禁用的日期

Android 仍然能够在日期选择器中选择禁用的日期,android,date,datepicker,android-datepicker,Android,Date,Datepicker,Android Datepicker,我想禁用android中日期选择器的过去日期。 我可以通过使用 dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 这工作正常,日期选择器中的过去日期看起来已禁用。但我仍然可以点击上一个日期并选择它。 如何避免这种情况发生? 下面是我的日期选择器的屏幕截图:- 这是我禁用过去日期的代码:- @Override public Dialog onCreateDialog(Bundle savedIns

我想禁用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;
    }
@覆盖
创建对话框上的公共对话框(Bundle savedInstanceState){
//使用当前日期作为选择器中的默认日期
最终日历c=Calendar.getInstance();
int year=c.get(日历年);
int month=c.get(日历月);
int day=c.get(日历日期,每月的第天);
mActivity=新的WeakReference(
(CreateEvent)getActivity());
DatePickerDialog=新建DatePickerDialog(getActivity(),this,year,month,day);
如果(callingView==fromDate){
dialog.getDatePicker().setMinDate(System.currentTimeMillis()-1000);
}else if(callingView==toDate){
dialog.getDatePicker().setMinDate(fromD);
}
//创建DatePickerDialog的新实例并返回它
返回对话框;
}

从评论中得知这是棒棒糖中的一个bug。所以,通过编程修复了它


您所需要做的就是使用最小日期集检查所选日期。

是的,这是一个错误,您需要使用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;
}
用于未来日期

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;
}
public静态布尔validateFutureDate(上下文mContext、int-day、int-month、int-year){
最终日历c=Calendar.getInstance();
int currentYear=c.get(日历年);
int currentMonth=c.get(日历月)+1;
int currentDay=c.get(日历日期,每月的第天);
如果(日<当前日和年==当前年和月==当前月){
Toast.makeText(mContext,“请选择有效日期”,Toast.LENGTH_LONG.show();
返回false;
}否则如果(月<当前月和年==当前年){
Toast.makeText(mContext,“请选择有效月份”,Toast.LENGTH_LONG.show();
返回false;
}否则如果(年<当前年){
Toast.makeText(mContext,“请选择有效年份”,Toast.LENGTH_LONG.show();
返回false;
}
返回true;
}

只需在此方法中传递所选日期月、年,并将返回布尔值。

要解决Android棒棒糖的错误,您可以按如下方式验证日期:

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
    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();
    }
intmyear,mMonth,mDay;
Calendar mcurrentDate=Calendar.getInstance();
mYear=mcurrentDate.get(日历年);
mMonth=mcurrentDate.get(日历月);
mDay=mcurrentDate.get(日历、日期、月份);
DatePickerDialog mDatePicker=new DatePickerDialog(上下文,new DatePickerDialog.OnDateSetListener(){
public void onDateSet(日期选择器日期选择器,int selectedyear,int selectedmonth,int selectedday){
//TODO自动生成的方法存根
//在此验证,条件是避免选择过去的日期
如果(selectedyear==mYear&&(selectedmonth+1)==month+1){
如果(选择日期
这是lolipop中的bug,您可以使用较低版本进行检查。为了解决这个问题,您需要在调用
onDateSet
方法时应用您的逻辑。这正是问题所在。这段代码没有正常工作。