2013-07-26 148 views
9

我想在DatePickerDialog。我今天的日期之前禁用日期是在Android的新的请建议我如何能做到这一点。这里是我的代码,我有DatePickerDialog如何在DatePickerDialog Android的今日日期之前禁用日期?

书面
final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
        int dayOfMonth) { 
       // TODO Auto-generated method stub 
        myCalendar.set(Calendar.YEAR, year); 
        myCalendar.set(Calendar.MONTH, monthOfYear); 
        myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
        updateLabel(val); 
      } 
     }; 
     depart.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        new DatePickerDialog(this, date, myCalendar 
          .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), 
          myCalendar.get(Calendar.DAY_OF_MONTH)).show(); 
        val=1; 
       } 
      }); 

     returnDate.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        new DatePickerDialog(this, date, myCalendar 
          .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), 
          myCalendar.get(Calendar.DAY_OF_MONTH)).show(); 
          val=2; 
       } 
      }); 


private void updateLabel(int val) { 

     String myFormat = "dd/MM/yy"; //In which you need put here 
     SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); 
     Log.d("Date vlue ", "==="+sdf.format(myCalendar.getTime())); 
     if(val==1) 
      depart.setText(sdf.format(myCalendar.getTime())); 
     else 
      returnDate.setText(sdf.format(myCalendar.getTime())); 

     } 

请建议我什么必须做

+0

http://stackoverflow.com/questions/4625002/android-disable-past-dates-in-datepicker –

回答

8

看到这个例子..!

import java.util.Calendar; 
import android.app.Activity; 
import android.app.DatePickerDialog; 
import android.app.Dialog; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.DatePicker; 
import android.widget.TextView; 

public class MyAndroidAppActivity extends Activity { 

    private TextView tvDisplayDate; 

    private Button btnChangeDate; 

    private int myear; 
    private int mmonth; 
    private int mday; 

    static final int DATE_DIALOG_ID = 999; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     setCurrentDateOnView(); 
     addListenerOnButton(); 

    } 

    // display current date 
    public void setCurrentDateOnView() { 

     tvDisplayDate = (TextView) findViewById(R.id.tvDate);  

     final Calendar c = Calendar.getInstance(); 
     myear = c.get(Calendar.YEAR); 
     mmonth = c.get(Calendar.MONTH); 
     mday = c.get(Calendar.DAY_OF_MONTH); 

     // set current date into textview 
     tvDisplayDate.setText(new StringBuilder() 
       // Month is 0 based, just add 1 
       .append(mmonth + 1).append("-").append(mday).append("-") 
       .append(myear).append(" ")); 
    } 

    public void addListenerOnButton() { 

     btnChangeDate = (Button) findViewById(R.id.btnChangeDate); 

     btnChangeDate.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       showDialog(DATE_DIALOG_ID); 

      } 

     }); 

    } 

    @Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DATE_DIALOG_ID: 
      // set date picker as current date 
      DatePickerDialog _date = new DatePickerDialog(this, datePickerListener, myear,mmonth, 
        mday){ 
       @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; 
     } 
     return null; 
    } 

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

     // when dialog box is closed, below 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 
      tvDisplayDate.setText(new StringBuilder().append(mmonth + 1) 
        .append("-").append(mday).append("-").append(myear) 
        .append(" "));  

     } 
    }; 

} 

main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/btnChangeDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Change Date" /> 

    <TextView 
     android:id="@+id/lblDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Current Date (M-D-YYYY): " 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/tvDate" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

</LinearLayout> 
+0

这是关于什么? – Enrichman

+0

在DatePickerDialog的今天日期之前禁用日期。 – Hariharan

+0

我试过这个,它只允许在今天的日期前挑选日期 – Developer

19

使用getDatePicker()方法获取DatePickerDialog中使用的DatePicker并使用setMinDate(Long millis)方法。

传递给它你必须设置的最小日期(从Epoch以毫秒为单位)。

所以,你可以这样做

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date d = sdf.parse("21/12/2012"); 
DatePicker datePicker = date.getDatePicker(); 
datePicker.setMinDate(d.getTime()); 

编辑:

好了,所以当你创建你DatePickerDialog,显示它之前,只是把它保存到一个变量,设置最短日期然后显示它。

DatePickerDialog dpd = new DatePickerDialog(IweenFlightSearch.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); 
Date d = sdf.parse("21/12/2012"); 
dpd.getDatePicker().setMinDate(d.getTime()); 
dpd.show(); 

这应该工作。

+0

我没有得到你必须做出这些修改,以便今天之前的日期将被禁用 – Developer

+0

你还没有发布你的所有代码,所以你很难说“你在哪里”进行修改。你应该有一个DatePickerDialog或DatePicker的地方。如果你想获得进一步的帮助,你应该告诉我们你在哪里使用这些课程。 – Enrichman

+0

请在我的问题中看到我已发布完整的代码,我正在使用datePickerDailog – Developer

2

我得到了解决。希望这将有助于有人 静态最终诠释DATE_DIALOG_ID = 999;

depart.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        showDialog(DATE_DIALOG_ID); 

       } 
      }); 



protected Dialog onCreateDialog(int id) { 
     final Calendar now = Calendar.getInstance(); 

     switch (id) { 
     case DATE_DIALOG_ID: 
      // set date picker as current date 
      DatePickerDialog _date = new DatePickerDialog(this, date,myCalendar 
        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), 
        myCalendar.get(Calendar.DAY_OF_MONTH)){ 
       @Override 
       public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
       { 
        if (year < now.get(Calendar.YEAR)) 

         view.updateDate(myCalendar 
           .get(Calendar.YEAR), myCalendar 
           .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); 

        if (monthOfYear < now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR)) 
         view.updateDate(myCalendar 
           .get(Calendar.YEAR), myCalendar 
           .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); 

        if (dayOfMonth < now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) && 
          monthOfYear == now.get(Calendar.MONTH)) 
         view.updateDate(myCalendar 
           .get(Calendar.YEAR), myCalendar 
           .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); 
         } 
      }; 
      return _date; 
     } 
     return null; 
    } 
3

我知道这太晚了。但希望这会有所帮助。使用

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

你的情况的日期是DatePickerDialog

干杯!

+1

你能否解释一下减去1000的需要 – Arunkrishna

+0

它完美的工作,谢谢。可能-1000是因为你得到当前时间毫秒 – Kzaf

+1

最有可能是因为这个IllegalArgumentException问题。 https://stackoverflow.com/questions/13661788/how-to-set-minimum-datepicker-date-to-current-date – Artemiy

3

//创建DatePickerDialog的新实例,并返回它

DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this,year,month,day); 
      datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
      return datePickerDialog; 
相关问题