【问题标题】:how to not allow user select past date in datepicker?如何不允许用户在日期选择器中选择过去的日期?
【发布时间】:2012-02-29 06:08:30
【问题描述】:

当用户在日期选择器中选择过去的日期时,我想这样做,它不应该接受昨天的日期。我的应用程序将提示消息通知用户不能选择小于当前日期。请指导我吗?...谢谢

mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
            Button pickDate_btn = (Button) findViewById(R.id.pickDate);
            pickDate_btn.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                showDialog(DATE_DIALOG_ID);
            }
        });

        final Calendar now = Calendar.getInstance();
        mYear = now.get(Calendar.YEAR);
        mMonth = now.get(Calendar.MONTH);
        mDay = now.get(Calendar.DAY_OF_MONTH);

        updateDisplay();      

@Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this,
                            mDateSetListener,
                            mYear, mMonth, mDay);
        }
        return null;
    }

    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        switch (id) {

            case DATE_DIALOG_ID:
                ((DatePickerDialog) dialog).updateDate(mYear, mMonth, mDay);
                break;
        }
    }    

    private void updateDisplay() {
        mDateDisplay.setText(
            new StringBuilder()
                    // Month is 0 based so add 1
                    .append(mDay).append("-")
                    .append(mMonth + 1).append("-")
                    .append(mYear).append(" "));
    }

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

    @Override
    public void onDateSet(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
                    // TODO Auto-generated method stub

            mYear = year;
                    mMonth = monthOfYear;
                    mDay = dayOfMonth;
                    updateDisplay();

    //should add code here?             
                }
            };

【问题讨论】:

    标签: android


    【解决方案1】:

    从 API 级别 11 开始,就有了一种方法:

    DatePicker.setMinDate(new Date().getTime())
    

    或者如果它不起作用(旧 API),那么,

    Date datePickerDate = // get the value here;
    Date currentDate = new Date();
    if (datePickerDate.before(currentDate)) {
      // error !
    }
    

    【讨论】:

    • 如果 DatePicker 与 CalendarView 一起显示,setMinDate 不会阻止用户选择过去的日期。它只会使 minDate '之前'的日期变灰。 setMinDate 仅在 DatePicker 与 Spinners 一起显示时才有效。
    • @AntonioSesto,我用的是github.com/wdullaer/MaterialDateTimePicker,没有这个bug。
    【解决方案2】:

    我们不能设置任何属性来限制 DatePicker 选择一个不过去的日期,但我们可以通过以下方式以编程方式完成:

    if(dateObj1.before(dateObj2) || dateObj1.equals(dateObj2)){
    //the program runs normally
    }
    else{
    
                    new AlertDialog.Builder(PM_Edit.this)
    
                    .setTitle("Wrong Data Input!")
    
                    .setMessage("The end Date must be Before the start Date, please insert new Date values")
    
                    .setNeutralButton("Ok",
    
                    new DialogInterface.OnClickListener() {
    
                    public void onClick(DialogInterface dialog,
    
                    int which) {
    
                    }
    
                    }).show();
                }
    

    【讨论】:

    • dateObj1 n dateObj2 是 textview 吗?选择日期选择器后?我们只比较?
    • 不,这些不是文本视图,这些是日期类型,通过 new Date(currentTimeMillis()) 和 dateOvject1= new Date(year - 1900, month, day); 创建 current(dateObj2);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多