Обновите DatePickerDialog и TimePickerDialog до текущей даты и времени

Я новичок в Android, и я разрабатываю свое первое приложение для напоминания на основе местоположения, где я добавляю задачи с местоположениями и датой и временем, для которых, когда я достигну, я должен быть уведомлен. В операции добавления задачи у меня есть имя задачи, местоположение, кнопки для даты и времени (при нажатии на кнопку DatePickerDialog и отображается TimePickerDialog) и кнопка AddTask. Когда я даю все значения и нажимаю кнопку AddTask, я хочу сбросить DatePickerDialog и TimePickerDialog на текущую дату и время. Моя проблема в том, что он показывает значения, которые я недавно установил для задачи.. Как обновить.. Диалог помощи.. plzz..

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_task);
    init();

    /** Capture our View elements */
    //pDisplayDate = (TextView) findViewById(R.id.displayDate);
    pPickDate = (Button) findViewById(R.id.pickDate);

    /** Listener for click event of the button */
    pPickDate.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDialog(DATE_DIALOG_ID);
        }
    });

   /** Capture our View elements */
    //pDisplayTime = (TextView) findViewById(R.id.displayTime);
    pPickTime = (Button) findViewById(R.id.pickTime);


    /** Listener for click event of the button */
    pPickTime.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            showDialog(TIME_DIALOG_ID);
        }
    });

    /** Get the current date and time */
    final Calendar cal = Calendar.getInstance();
    pYear = cal.get(Calendar.YEAR);
    pMonth = cal.get(Calendar.MONTH);
     pDay = cal.get(Calendar.DAY_OF_MONTH);

    mHour = cal.get(Calendar.HOUR_OF_DAY);
    mMinute = cal.get(Calendar.MINUTE);
}

/** Create a new dialog for date and time picker */
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID:
            return new DatePickerDialog(this,
                    pDateSetListener,
                    pYear, pMonth, pDay);

        case TIME_DIALOG_ID:
            return new TimePickerDialog(this,
                    mTimeListener,
                    mHour,mMinute,true);
    }
    return null;
}

public void add_task(View view) {

    Task task = new Task();
    task.setTaskNameString(activityForm.getTaskNameInput().getText()
            .toString());
    task.setTaskLocString(activityForm.getTaskLocInput());
    task.setTaskLat(activityForm.getTaskLat());
    task.setTaskLon(activityForm.getTaskLon());
    task.setDateString(activityForm.getTaskDateInput());
    task.setTimeString(activityForm.getTaskTimeInput());

    persistTask(task);

    Toast.makeText(getApplicationContext(), "SAVED=" + task.hashCode(),
            Toast.LENGTH_LONG).show();

    activityForm.getTaskNameInput().setText(" ");

}

1 ответ

Решение

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

private TimePickerDialog mTPD;
private DatePickerDialog mDPD;

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
        case DATE_DIALOG_ID:
            mDPD = new DatePickerDialog(this,
                    pDateSetListener,
                    pYear, pMonth, pDay);
            return mDPD;

        case TIME_DIALOG_ID:
            mTPD = new TimePickerDialog(this,
                    mTimeListener,
                    mHour,mMinute,true);
            return mTPD;
    }
    return null;
}

Затем вы можете изменить показанную дату / время следующим образом:

Calendar c = Calendar.getInstance();
if (mTPD != null) {
    mTPD.updateTime(c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE));
}

if (mDPD != null) {
    mDPD.updateDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH),
            c.get(Calendar.DAY_OF_MONTH));
}

Редактировать:

Чтобы изменить значения, установленные в диалоге, вы должны поиграть с доступными слушателями (которые вы уже установили). Вот пример (не проверенный):

TimePickerDialog.OnTimeSetListener mTimeListener = new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        Calendar c = Calendar.getInstance();
        int curHour = c.get(Calendar.HOUR_OF_DAY);
        int curMin = c.get(Calendar.MINUTE);
        if (hourOfDay < curHour) hourOfDay = curHour;
        if (minute < curMin) minute = curMin;

        mTPD.updateTime(hourOfDay, minute);
    }
};
Другие вопросы по тегам