2016-04-12 2 views
1

Я хочу отключить даты до сегодняшнего дня в DatePickerDialog. Я новичок в андроиде, предложите мне, как я могу это сделать. Вот мой код, который я написал для DatePickerDialog. Я расширяю класс фрагментов. Пожалуйста, помогите мне :)Как отключить даты до сегодняшнего дня в DatePickerDialog Android

public class OneFragment extends Fragment { 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     final View rootView = inflater.inflate(R.layout.fragment_one, container, false); 


     CheckInDate = (EditText) rootView.findViewById(R.id.CheckInDate); 

     CheckOutDate = (EditText) rootView.findViewById(R.id.CheckOutDate); 

     CheckInDate.setOnClickListener(new View.OnClickListener() 

     { 
      @Override 
      public void onClick(View v) { 
       if (v == CheckInDate) { 

        final Calendar c = Calendar.getInstance(); 
        year = c.get(Calendar.YEAR); 
        month = c.get(Calendar.MONTH); 
        day = c.get(Calendar.DAY_OF_MONTH); 


        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), 
          new DatePickerDialog.OnDateSetListener() { 

           @Override 
           public void onDateSet(DatePicker view, int selectedYear, 
                 int selectedMonth, int selectedDay) { 

            year = selectedYear; 
            month = selectedMonth +1; 
            day = selectedDay; 


            // set selected date into textview 
            CheckInDate.setText(new StringBuilder().append(day) 
              .append("/").append(month).append("/").append(year) 
              .append(" ")); 



           } 
          }, year, month, day); 
        datePickerDialog.show(); 
       } 
      } 
     }); 

     CheckOutDate.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 


       if (v == CheckOutDate) { 

        final Calendar c = Calendar.getInstance(); 
        year = c.get(Calendar.YEAR); 
        month = c.get(Calendar.MONTH); 
        day = c.get(Calendar.DAY_OF_MONTH); 


        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), 
          new DatePickerDialog.OnDateSetListener() { 

           @Override 
           public void onDateSet(DatePicker view, int year, 
                 int monthOfYear, int dayOfMonth) { 

            CheckOutDate.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); 

           } 
          }, year, month, day); 
        datePickerDialog.show(); 
       } 
      } 
     }); 
     return rootView; 
    }} 
+0

Просто получать текущую дату и использовать, если заявление проверки, если (selected_date.before (текущая_дата)) {// делать вещи} –

+0

Код? :(@shree Пожалуйста, помогите мне yaar :) – ATKT

+0

вам нужно зарегистрироваться на onDateSet, если дата перед toaday, тогда не делайте ничего другого, чтобы сделать что-то, что вы хотите –

ответ

0
protected Dialog onCreateDialog(int id) { 
    Calendar c = Calendar.getInstance(); 
    year_x = c.get(Calendar.YEAR); 
    month_x = c.get(Calendar.MONTH); 
    day_x = c.get(Calendar.DAY_OF_MONTH); 
    switch (id) { 
     case DILOG_ID: 
      // set date picker as current date 
      DatePickerDialog _date = new DatePickerDialog(getActivity(), datePickerlistner, year_x, month_x, 
        day_x) { 
       @Override 
       public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        if (year < year_x) 
         view.updateDate(year_x, month_x, day_x); 

        if (monthOfYear < month_x && year == year_x) 
         view.updateDate(year_x, month_x, day_x); 

        if (dayOfMonth < day_x && year == year_x && monthOfYear == month_x) 
         view.updateDate(year_x, month_x, day_x); 

       } 
      }; 
      return _date; 
    } 
    return null; 
} 

DatePickerDialog.OnDateSetListener datePickerlistner = new DatePickerDialog.OnDateSetListener() { 

    @Override 
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

     year_x = year; 
     month_x = monthOfYear; 
     day_x = dayOfMonth; 
     btn_date.setText(day_x + "/" + (month_x + 1) + "/" + year_x); 
    } 
}; 
+0

Благодарим вас: D Я проверяю – ATKT

+0

onCreateDialog в классе фрагментов, который никогда не использовался :( – ATKT

+0

Вы импортируете android.app.Fragment или android.support.v4.app.Fragment –

0
Try like this... 

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()-(newDate.getTime()%(24*60*60*1000))); 

Может это поможет!

+0

Спасибо, братан: D Я проверяю – ATKT

0

Использования setMinDate функция DatePicker

datePickerDialog.getDatePicker().setMinDate(c.getTimeInMillis()); 
datePickerDialog.show(); 

Рабочего кода ниже

 final Calendar c = Calendar.getInstance(); 
     int mYear = c.get(Calendar.YEAR); 
     int mMonth = c.get(Calendar.MONTH); 
     int mDay = c.get(Calendar.DAY_OF_MONTH); // add here +1 if you don't 
               //want user to select current date also 
     c.set(Calendar.DAY_OF_MONTH, mDay); 
     DatePickerDialog dpd = new DatePickerDialog(getActivity(), 
       new DatePickerDialog.OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker view, int year, 
              int monthOfYear, int dayOfMonth) { 
         Calendar cal = Calendar.getInstance(); 
         cal.set(Calendar.MONTH, monthOfYear); 
         cal.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
         cal.set(Calendar.YEAR, year); 
         if(cal.before(c)) { 
          //toast("Select valid date please."); 
          // notify user about wrong date. 
          return; 
         } 
         StringBuilder date = new StringBuilder(); 
         //date.delete(0, date.length()); 
         date.append((dayOfMonth<10?"0":"")).append(dayOfMonth) 
          .append("-").append((monthOfYear + 1) < 10 ? "0" : "") 
          .append((monthOfYear+1)).append("-").append(year); 
         //text.setText(date.toString()); 
        } 
       }, mYear, mMonth, mDay); 
     dpd.getDatePicker().setMinDate(c.getTimeInMillis()); 
     dpd.show(); 

Надеется, что это будет работать.

+0

Спасибо вы брови: D Я проверяю – ATKT

+0

тост error :(@Elite – ATKT

+0

Удалите строку ... тост - это метод в моем случае. – ELITE

0

Добавьте следующее в вашей Дате установить

SimpleDateFormat dfDate = new SimpleDateFormat("yyyy-MM-dd"); //Format of Date 
    Date current = dfDate.parse(String.valueOf(year) + "-" + 
String.valueOf(month) + "-" + String.valueOf(day));//Converting the current Date 
      Date selected = dfDate.parse(String.valueOf(year) + "-" + String.valueOf(month) + "-" + String.valueOf(dayOfMonth)); //Converting the selected date 

// Тогда просто Проверьте, выполнив ниже кода

if (selected.before(current)) { 
//Do Stuff here 
} 
0

использования этого я также найти это на StackOverflow около 2 месяцев назад, но не перейдите по ссылке

import java.util.Calendar; 

import android.app.DatePickerDialog; 
import android.content.Context; 
import android.util.Log; 
import android.widget.DatePicker; 

public class MyPicker extends DatePickerDialog { 
    private int maxYear = 0; 
    private int maxMonth = 0; 
    private int maxDay = 0; 

    private int minYear = 0; 
    private int minMonth = 0; 
    private int minDay = 0; 
    private Calendar m_minDateCalendar, m_maxDateCalendar, m_calendar; 

    private boolean m_fired = false; 

    public MyPicker(Context context, OnDateSetListener callBack, 
      Calendar p_minCalendar, Calendar p_maxCalendar, 
      Calendar p_currentCalendar) { 
     super(context, callBack, p_currentCalendar.get(Calendar.YEAR), 
       p_currentCalendar.get(Calendar.MONTH), p_currentCalendar 
         .get(Calendar.DAY_OF_MONTH)); 

     m_minDateCalendar = (Calendar) p_minCalendar.clone(); 
     m_maxDateCalendar = (Calendar) p_maxCalendar.clone(); 
     m_calendar = (Calendar) p_currentCalendar.clone(); 

     this.minDay = m_minDateCalendar.get(Calendar.DAY_OF_MONTH); 
     this.minMonth = m_minDateCalendar.get(Calendar.MONTH); 
     this.minYear = m_minDateCalendar.get(Calendar.YEAR); 
     this.maxDay = m_maxDateCalendar.get(Calendar.DAY_OF_MONTH); 
     this.maxMonth = m_maxDateCalendar.get(Calendar.MONTH); 
     this.maxYear = m_maxDateCalendar.get(Calendar.YEAR); 

     try { 
      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
       m_fired = false; 
       this.getDatePicker().setMaxDate(
         m_maxDateCalendar.getTime().getTime()); 
       this.getDatePicker().setMinDate(
         m_minDateCalendar.getTime().getTime()); 
      } else { 
       m_fired = true; 
      } 
     } catch (Throwable p_e) { 

      Log.d("m_maxDateCalendar", "" 
        + m_maxDateCalendar.getTime().getTime()); 
      Log.d("m_minDateCalendar", "" 
        + m_minDateCalendar.getTime().getTime()); 
      Log.d("m_calendar", "" + m_calendar.getTime().getTime()); 
      p_e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onDateChanged(DatePicker p_view, int p_year, int p_monthOfYear, 
      int p_dayOfMonth) { 
     super.onDateChanged(p_view, p_year, p_monthOfYear, p_dayOfMonth); 

     if (m_fired) { 
      m_calendar.set(Calendar.YEAR, p_year); 
      m_calendar.set(Calendar.MONTH, p_monthOfYear); 
      m_calendar.set(Calendar.DAY_OF_MONTH, p_dayOfMonth); 

      if (m_calendar.after(m_maxDateCalendar)) { 
       m_fired = true; 
       if (maxMonth > 11) { 
        maxMonth = 11; 
       } 
       p_view.updateDate(maxYear, maxMonth, maxDay); 
      } else if (m_calendar.before(m_minDateCalendar)) { 
       m_fired = true; 
       if (minMonth > 11) { 
        minMonth = 11; 
       } 
       p_view.updateDate(minYear, minMonth, minDay); 
      } else { 
       m_fired = true; 
       p_view.updateDate(p_year, p_monthOfYear, p_dayOfMonth); 
      } 
     } 
    } 

} 

в вашей деятельности используйте этот метод

private void openDatePicker(int month, int day, int year) { 
     try { 

      Log.e("calender", "MONTH = " + month); 
      Log.e("calender", "DAY_OF_WEEK = " + day); 
      Log.e("calender", "YEAR = " + year); 

      m_calendar.set(Calendar.DAY_OF_MONTH, month); 
      m_calendar.set(Calendar.MONTH, day); 
      m_calendar.set(Calendar.YEAR, year); 

      int p_minYear, p_minMonth, p_minDay; 
      int p_maxYear, p_maxMonth, p_maxDay; 

      p_minDay = 1; 
      p_minMonth = 0; 
      p_minYear = 1950; 

      p_maxDay = 31; 
      p_maxMonth = 11; 
      p_maxYear = 2015; 

      Calendar m_maxDateCalendar = Calendar.getInstance(); 
      m_maxDateCalendar.set(Calendar.YEAR, p_maxYear); 
      m_maxDateCalendar.set(Calendar.MONTH, p_maxMonth); 
      m_maxDateCalendar.set(Calendar.DAY_OF_MONTH, p_maxDay); 

      Calendar m_minDateCalendar = Calendar.getInstance(); 
      m_minDateCalendar.set(Calendar.YEAR, p_minYear); 
      m_minDateCalendar.set(Calendar.MONTH, p_minMonth); 
      m_minDateCalendar.set(Calendar.DAY_OF_MONTH, p_minDay); 

      new MyPicker(m_context, m_datePickerListener, m_minDateCalendar, 
        m_maxDateCalendar, m_calendar).show(); 
     } catch (Throwable p_e) { 
      // Have suppressed the exception 
      p_e.printStackTrace(); 
     } 
    } 


m_datePickerListener = new DatePickerDialog.OnDateSetListener() { 
      public void onDateSet(DatePicker p_view, int p_year, 
        int p_monthOfYear, int p_dayOfMonth) { 
       m_calendar.set(Calendar.YEAR, p_year); 
       m_calendar.set(Calendar.MONTH, p_monthOfYear); 
       m_calendar.set(Calendar.DAY_OF_MONTH, p_dayOfMonth); 

       date_picker.setText("" 
         + m_dateFormat.format(m_calendar.getTime())); 

      } 
     }; 
+0

Позвольте мне проверить длинный код: P – ATKT

+0

private void openDatePicker Где поместить эту строку в мой класс фрагментов? – ATKT

+0

его метод. вы можете добавить любое место в своем фрагменте. –

0

попробовать это,

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
       // Use the current date as the default date in the picker 
       final Calendar c = Calendar.getInstance(); 
       int year = c.get(Calendar.YEAR); 
       int month = c.get(Calendar.MONTH); 
       int day = c.get(Calendar.DAY_OF_MONTH); 
       Log.d("Day", "Day" + (c.get(Calendar.DAY_OF_MONTH) - 1)); 
       c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), (c.get(Calendar.DAY_OF_MONTH)) - 1); 

       DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day - 1); 

        dialog.getDatePicker().setMaxDate(c.getTimeInMillis()); 
        return dialog; 


      } 
0

Установка Minumum и максимальную дату DatePickerDialog недостаточно. Пользователь может нажать на поле года и выбрать любой год.

Вы должны также установить диапазон года на DatePicker так:

datePicker.setYearRange(calendar.get(Calendar.YEAR), calendar.get(Calendar.YEAR) + 1); 
Смежные вопросы