2012-02-29 137 views
3

我想在用戶選擇datepicker中的過去日期時,它不應該接受昨天的日期。我的應用程序將提示信息,告知用戶不能選擇低於當前date.anyone指導我請...謝謝你如何禁止用戶在datepicker中選擇過去的日期?

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?    
       } 
      }; 

回答

3

我們不能設置,限制的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(); 
      } 
+0

dateObj1 n dateObj2是textview?選擇日期選擇器後?我們只比較一下? – 2012-02-29 06:26:10

+0

不是這些不是文本視圖這些是日期類型,通過new Date(currentTimeMillis())和dateOvject1 = new Date(year - 1900,month,day)創建current(dateObj2); – jeet 2012-02-29 06:36:01

+0

如果基於我的代碼...我應該把代碼放在onDateSet部分? – 2012-02-29 06:39:12

7

由於API級別11存在的一個方法:

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

或者,如果其沒有工作(舊API),那麼,

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

謝謝!需要此:) :) – 2013-05-09 18:12:33

+1

如果DatePicker與CalendarView一起顯示,則setMinDate不會阻止用戶選擇過去的日期。它只在'minDate'之前將日期灰化。 setMinDate僅在使用Spinners顯示DatePicker時有效。 – 2015-05-09 16:33:05

+1

@AntonioSesto,我使用https://github.com/wdullaer/MaterialDateTimePicker,它沒有這個bug。 – CoolMind 2016-11-30 08:55:44

相關問題