Обновление диалога

У меня есть TextView в моей деятельности, которая используется для отображения даты. Когда пользователь нажимает на TextView, я запускаю DatePickerDialog следующим образом:

public void onClick(View v) {
    if (v.getId() == R.id.date_wrapper) {
        showDialog(DATE_DIALOG_ID);
    }
}

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
       GregorianCalendar date = new GregorianCalendar();

       if (mData != null) {
           date.setTimeInMillis(mData.getDate());
       }

       return new DatePickerDialog(this, datePickerListener, date.get(Calendar.YEAR), date.get(Calendar.MONTH), date.get(Calendar.DAY_OF_MONTH));
    }

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

        GregorianCalendar selectedDate = new GregorianCalendar();
        selectedDate.set(Calendar.YEAR, selectedYear);
        selectedDate.set(Calendar.MONTH, selectedMonth);
        selectedDate.set(Calendar.DAY_OF_MONTH, selectedDay);

        mData.setDate(selectedDate.getTimeInMillis());

        populateDate();
    }
};

Это прекрасно работает. Однако, когда пользователь нажимает кнопку отправки, я хочу установить дату на сегодняшний день. Я могу легко установить переменную Date объекта mData на сегодняшний день. Однако я не уверен, как обновить DatePickerDialog. Он уже создан, поэтому нажатие на TextView не запустит повторно onCreateDialog. Итак, когда я нажимаю на TextView, открывается DatePickerDialog, и это последняя дата, которую я выбрал.

Как мне сослаться на DatePickerDialog, чтобы обновить дату? Уничтожение DatePickerDialog также было бы приемлемым.


person Andrew    schedule 27.11.2012    source источник
comment
почему бы вам не запускать новый экземпляр datapickerdialog каждый раз, когда пользователь нажимает на текстовое представление? Таким образом всегда вызывается createDialog, верно?   -  person kinghomer    schedule 27.11.2012
comment
Как? Я просто вызываю showDialog(MY_ID);, который является системным методом   -  person Andrew    schedule 27.11.2012
comment
Можете ли вы опубликовать код активности? Так что я могу видеть, где и как вы вызываете диалог в каждой части   -  person kinghomer    schedule 28.11.2012
comment
Я обновил ОП. Весь соответствующий код опубликован.   -  person Andrew    schedule 28.11.2012


Ответы (1)


Я нашел приемлемое решение.

Когда я сбрасываю дату, я также должен вызвать removeDialog(DATE_DIALOG_ID);, чтобы уничтожить диалог. При следующем вызове showDialog(DATE_DIALOG_ID); он будет воссоздан.

person Andrew    schedule 27.11.2012