2016-02-12 1 views
0

Я использую DatePicker, чтобы показать дату пользователю в моей заявке. Тем не менее, я использую метод onCreateDialog, чтобы показать пользователю выбор даты, задав целочисленную переменную следующим образом: static final int DATE_DIALOG_ID = 999; Затем я звоню ниже метода showDialog (DATE_DIALOG_ID);Android: не удается установить текущую дату каждый раз, когда вы выбрали дату.

Первый раз, когда сборщик даты инициализирован текущей датой. До сих пор все в порядке.

@Override 
    protected Dialog onCreateDialog(int id) { 
     Calendar c = Calendar.getInstance(); 
     final int myear = c.get(Calendar.YEAR); 
     final int mmonth = c.get(Calendar.MONTH); 
     final int mday = c.get(Calendar.DAY_OF_MONTH); 
     Log.d("Executed", "hihihihihihihi"); 
     switch (id) { 
      case DATE_DIALOG_ID: 
       // set date picker as current date 
       DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, 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; 
    } 

Но проблема в том, когда я выбираю дату, кроме текущей даты его works.but, когда я снова пытаюсь выбрать дату выбор даты по умолчанию показывает мне последние выбранный date.I удается установить текущую дату каждый раз когда откроется сборщик данных, так как я могу это сделать

ответ

0

Попробуйте использовать выбор даты с here.

Добавьте ниже метод и класс в вашей деятельности:

public void showDatePickerDialog() { 
    DialogFragment newFragment = new DatePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "datePicker"); 
} 

public static class DatePickerFragment extends DialogFragment 
          implements DatePickerDialog.OnDateSetListener { 

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

     // Create a new instance of DatePickerDialog and return it 
     return new DatePickerDialog(getActivity(), this, year, month, day); 
    } 

    public void onDateSet(DatePicker view, int year, int month, int day) { 
     // Do something with the date chosen by the user 
    } 
} 
+0

но это в моей деятельности – Dhiraj

+0

Chintan soni дает ошибку для строки newFragment.show (getSupportFragmentManager(), "datePicker"); который не может решить метод getSupportFragmentManager() – Dhiraj

+0

@Dhiraj Убедитесь, что вы записываете код в действие, а не в фрагмент. –

0
private Calendar c; 

@Override 
onCreate(){ 

c = Calendar.getInstance(); 

} 



@Override 
    protected Dialog onCreateDialog(int id) { 

     final int myear = c.get(Calendar.YEAR); 
     final int mmonth = c.get(Calendar.MONTH); 
     final int mday = c.get(Calendar.DAY_OF_MONTH); 
     Log.d("Executed", "hihihihihihihi"); 
     switch (id) { 
      case DATE_DIALOG_ID: 
       // set date picker as current date 
       DatePickerDialog _date = new DatePickerDialog(this, AlertDialog.THEME_HOLO_LIGHT, datePickerListener, myear, mmonth, 
         mday) { 




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

         /// Here you can set your updated date to calendar instance. So whenever you open it again, it will display last updated date 
         c.set(year, (monthOfYear- 1), 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; 
    } 

Надеется, что это поможет!

+0

не работает bro – Dhiraj

+0

Вы проверили обновленный ответ? Я обновил свой ответ несколько минут назад. Пожалуйста, пройдите это и дайте мне знать, его работа или нет! – Rahul

+0

не работает ......... – Dhiraj

0

(английский не мой первый язык, пожалуйста, поправьте, если это необходимо)

Я думаю, что ваша проверка состояния является неправильной,

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

Например: По умолчанию вы настраиваете текущую дату сегодня (13/2/2016).

Шаг 1:

В Datepicker по дате по умолчанию является 13/2/2016. Теперь вы выбираете предыдущий день (12/2/2016)

Теперь значение даты для печати станет 12.12.2016.

В этом случае

если (год < myear) = ложь

если (monthOfYear < mmonth & & год == myear) = ложь

если (DayOfMonth < MDAY & & год == myear & & месяцOfYear == mmonth) = true

Шаг 2

Теперь вы снова меняете дату Datepicker к сегодняшней дате (13/2/2016)

В этом случае:

если (год < myear) = ложный

если (monthOfYear < mmonth & & год == myear) = ложный

если (DayOfMonth < MDAY & & год == myear & & monthOfYear == mmonth) = ложь - этот случай станет ложным, потому что DayOfMonth и MDAY одинаковы. но вы проверяете более ранние даты.

+0

Решена ли эта проблема? ? – Sabari

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