2013-07-26 4 views
9

Je veux désactiver les dates avant la date d'aujourd'hui dans la DatePickerDialog .Je suis nouveau dans Android s'il vous plaît me suggérer comment pourrais-je faire .Voici mon code que je l'ai écrit pour DatePickerDialogComment faire pour désactiver les dates avant aujourd'hui dans 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())); 

     } 

S'il vous plaît me suggérer ce que faire

+0

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

Répondre

8

Voir cet exemple ..!

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

De quoi s'agit-il? – Enrichman

+0

Désactiver les dates avant aujourd'hui date dans DatePickerDialog. – Hariharan

+0

J'ai essayé cela, il ne permet que de choisir des dates avant aujourd'hui dates – Developer

19

Obtenez le DatePicker utilisé dans votre DatePickerDialog avec la méthode getDatePicker() et utilisez la méthode setMinDate(Long millis).

Passez la date minimum (en millisecondes depuis Epoch) que vous devez définir.

Alors vous pouvez faire quelque chose comme

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

EDIT:

ok, donc quand vous créez votre DatePickerDialog, avant de le montrer, il suffit de sauvegarder à une variable, définissez la date minimale et ensuite le montrer.

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(); 

cela devrait fonctionner.

+0

i n'a pas eu où je dois faire ces changements pour que la date d'aujourd'hui soit désactivée – Developer

+0

Vous n'avez pas publié tout votre code, il est donc difficile de dire "où" vous devez apporter les changements. Vous devriez avoir quelque part un DatePickerDialog ou un DatePicker. Si vous voulez plus d'aide, vous devriez nous montrer où vous utilisez ces classes. – Enrichman

+0

S'il vous plaît voir dans ma question j'ai posté mon code complet que j'utilise pour la datePickerDailog – Developer

2

Je suis la solution .Hope il aidera à quelqu'un static final int 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

Je sais qu'il est trop tard. Mais j'espère que cela aidera. Utilisez

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

à la date de votre cas est DatePickerDialog

Cheers!

+1

Pourriez-vous s'il vous plaît expliquer le besoin de cela moins 1000 – Arunkrishna

+0

Cela fonctionne parfaitement, merci. Probablement le -1000 est parce que vous obtenez l'heure actuelle en millisecondes – Kzaf

+1

Très probablement en raison de ce problème IllegalArgumentException. https://stackoverflow.com/questions/13661788/how-to-set-minimum-datepicker-date-to-current-date – Artemiy

3

// Création d'une nouvelle instance de DatePickerDialog et le retourner

DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this,year,month,day); 
      datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); 
      return datePickerDialog; 
Questions connexes