2014-03-19 251 views
2

我有我的應用程序一個DatePicker這是在這種方式設置:的Android的DatePicker:基於當前日期禁用過去日期,

佈局:

  <TextView 
       android:id="@+id/traveltext" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_weight="1.11" 
       android:text="Date Of Travel" 
       android:textStyle="bold" /> 

      <EditText 
      android:id="@+id/txtDate" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" > 
     </EditText> 

       <Button 
      android:id="@+id/btnCalendar" 
      android:layout_width="30dp" 
      android:layout_height="42dp" 
      android:layout_marginRight="50dp" 
      android:background="@drawable/date" > 
     </Button> 
     </LinearLayout> 

全局值:

Button btnCalendar; 
EditText txtDate; 
private int mYear, mMonth, mDay; 

創建:

btnCalendar = (Button) findViewById(R.id.btnCalendar); 
    txtDate = (EditText) findViewById(R.id.txtDate); 
    btnCalendar.setOnClickListener(this); 

方法:

@Override 
public void onClick(View v) { 

    if (v == btnCalendar) { 

     // Process to get Current Date 
     final Calendar c = Calendar.getInstance(); 
     mYear = c.get(Calendar.YEAR); 
     mMonth = c.get(Calendar.MONTH); 
     mDay = c.get(Calendar.DAY_OF_MONTH); 

     // Launch Date Picker Dialog 
     DatePickerDialog dpd = new DatePickerDialog(this, 
       new DatePickerDialog.OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker view, int year, 
          int monthOfYear, int dayOfMonth) { 
         // Display Selected date in textbox 
         txtDate.setText(dayOfMonth + "-" 
           + (monthOfYear + 1) + "-" + year); 

        } 
       }, mYear, mMonth, mDay); 
     dpd.show(); 
    } } 

現在的問題是,如何禁用基於當前日期的過去日期?

請幫忙。謝謝。

回答

7
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 
    // the callback received when the user "sets" the Date in the 
    // DatePickerDialog 
    public void onDateSet(DatePicker view, int yearSelected, 
      int monthOfYear, int dayOfMonth) { 
     year = yearSelected; 
     month = monthOfYear + 1; 
     day = dayOfMonth; 
     // Set the Selected Date in Select date Button 
     txtarrivedate.setText(year + "-" + month + "-" + day); 
    } 
}; 

工作//方法自動調用showDialog()方法

@Override 
    protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case 1: 
     // create a new DatePickerDialog with values you want to show 

     DatePickerDialog da = new DatePickerDialog(this, mDateSetListener, 
       mYear, mMonth, mDay); 
     Calendar c = Calendar.getInstance(); 

     c.add(Calendar.DATE, 1); 
     Date newDate = c.getTime(); 
     da.getDatePicker().setMinDate(newDate.getTime()); 
     return da; 
     // create a new TimePickerDialog with values you want to show 
    case 2: 
     // create a new DatePickerDialog with values you want to show 
     DatePickerDialog da1 = new DatePickerDialog(this, 
       mDateSetListener2, mYear, mMonth, mDay); 
     Calendar c1 = Calendar.getInstance(); 

     c1.add(Calendar.DATE, 1); 
     Date newDate2 = c1.getTime(); 
     da1.getDatePicker().setMinDate(newDate2.getTime()); 
     return da1; 

    } 
    return null; 
} 

僅用於調用對話框 showDialog(1);

+0

但它顯示此行的'IllegalArgumentException': dpd.getDatePicker()。setMinDate(newDate2.getTime()); – MetaldroiD

+1

dpd.getDatePicker()。setMinDate(System.currentTimeMillis()); – 2014-03-19 06:35:16

+1

你好,檢查上面的代碼,它爲我工作 – 2014-03-19 06:42:19

0

我不認爲你實際上可以禁用日期選擇器。但是,一旦選擇日期,您可以使用當前日期對其進行驗證,並使用戶重新選擇未來的日期。如果用戶選擇過去的日期,您可以發送Toast消息。

+0

日期選擇器是另一個選項生成,你可以從一個EditText場得到它的日期,以便。 – Tapeshvar

+0

好的,如果是這樣,那麼請幫助我確認所選的日期和當前日期。我該怎麼做? – MetaldroiD

+0

您可以使用日曆獲取當前日期。 getInstance(); – Tapeshvar

0

在你onDateSet你可以在日期驗證像你想設置日期後才今天的日期,然後在onDateSet方法添加以下代碼

  Calendar cl = Calendar.getInstance(); 
      cl.set(year, monthOfYear, dayOfMonth); 
      if (cl.after(Calendar.getInstance())) { 
        //set your date 
      }else{ 
        //do nothing 
      } 

希望這會爲你

1

試試這個:

// set date picker with current date 
DatePickerDialog date = new DatePickerDialog(this, datePickerListener, mYear,mMonth,mDay){ 
      // Comapre the date selected in picker with the current date.  
      @Override 
      public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
      { 
       if (year < mYear) 
        view.updateDate(mYear,mMonth,mDay); 

       if (monthOfYear < mMonth && year == mYear) 
        view.updateDate(mYear,mMonth,mDay); 

       if (dayOfMonth < mDay && year == mYear && monthOfYear == mMonth) 
        view.updateDate(mYear,mMonth,mDay); 

      } 
     }; 
     return date; 
    }   

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

    // as soon as the dialog box is closed, this method will be called. 
    public void onDateSet(DatePicker view, int selectedYear, 
      int selectedMonth, int selectedDay) { 
     mYear = selectedYear; 
     mMonth = selectedMonth; 
     mDay = selectedDay; 

     // set selected date into textview 
     txtDate.setText(new StringBuilder().append(mMonth + 1) 
       .append("-").append(mDay).append("-").append(mYear) 
       .append(" "));  

    } 
}; 
+0

好哥們,但一旦我按一下按鈕即btnCalendar(見佈局) 所以在DatePickerDialog不彈出我把onClick? – MetaldroiD

+2

更新了代碼。用上面的dpd替換你的dpd。 –

+0

它的工作。你很殘酷\ m / – MetaldroiD

0

etDateOfDelivery.setOnClickListener(新OnClickListener(){

 @Override 
     public void onClick(View v) { 
      new DatePickerDialog(SendOrderActivity.this, 
        new OnDateSetListener() { 

         @Override 
         public void onDateSet(DatePicker arg0, int year, 
           int month, int day) { 

          if(month==intMonthOfYear && day<intDayOfMonth &&year<=intYear) 
          { 
            // your message. dont use dialogmessage. its my custom dialog. use in your away 
           DialogMessage.customDialogSingleButton(context, "Invalid Date", "Please Set Comming Date", "Cancel"); 
          } 
          else if(month<=intMonthOfYear && day==intDayOfMonth && year<=intYear) 
          { 
           DialogMessage.customDialogSingleButton(context, "Invalid Date", "Please Set Comming Date", "Cancel"); 
          } 
          else if(month<=intMonthOfYear && day<=intDayOfMonth && year<intYear) 
          { 
           DialogMessage.customDialogSingleButton(context, "Invalid Date", "Please Set Comming Date", "Cancel"); 
          } 
          else 
          { 


           if(month<9) 
           { 
            etDateOfDelivery.setText("0"+(month + 1) + "/" 
              + day+ "/" + year); 
           } 
           else 
           { 
            etDateOfDelivery.setText((month + 1) + "/" 
              + day+ "/" + year); 
           } 

          } 

         } 
        }, intYear, intMonthOfYear, intDayOfMonth).show(); 
     } 
    }); 
相關問題