2013-07-26 2 views
9

Я хочу, чтобы отключить даты до даты сегодня в DatePickerDialog .I новичок в 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

Получите DatePicker, используемый в вашем DatePickerDialog методом getDatePicker(), и используйте метод setMinDate(Long millis).

Передайте ему минимальную дату (в миллисекундах с эпохи), которую вы должны установить.

Таким образом, вы можете сделать что-то вроде

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

EDIT:

нормально, так что, когда ваш создании 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

я не получил u, где я должен внести эти изменения, чтобы дата до сегодняшнего дня была отключена. – Developer

+0

Вы не опубликовали весь свой код, поэтому трудно сказать «где» вы должны внести изменения. У вас должно быть место DatePickerDialog или DatePicker. Если вам нужна дополнительная помощь, вы должны показать нам, где вы используете эти классы. – Enrichman

+0

См. В моем вопросе, я опубликовал свой полный код, который я использую для datePickerDailog – Developer

2

Я получил решение .hope это поможет кому-то статического окончательного междунар 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^