Установить дату в DatePicker, но не текущую, а в виде milliseconds из БД
Есть активити для редактирования записей, из БД загружаются ранее сохраненные данные в том числе в textview календаря в виде milliseconds. Эта дата корректно отображается в textview, но при сохранении Calendar сохраняет не ранее загруженную дату из БД, а текущую на устройстве. Если открыть календарь, то в диалоговом окне будет выбрана тоже текущая дата, а не загруженная из БД.
private static String getDate(long millisFromDB, String dateFormat) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMMM yyyy", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(millisFromDB);
return simpleDateFormat.format(calendar.getTime());
}
private void setInitialDate() {
textViewCalendar.setText(DateUtils.formatDateTime(this, calendar.getTimeInMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
}
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
setInitialDate();
}
};
public void changeDate(View view) {
new DatePickerDialog(this, date, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
}
Как установить в DatePicker дату из БД в виде milliseconds?
Извините, если такой вопрос уже был, но 3й день поисков ни к чему не привёл. Спасибо.
Ответы (1 шт):
Спасибо, woesss, натолкнул на правильные мысли. Солюшн ниже. Нужно было всего-лишь создать второй экземпляр календаря в классе
public class ActivityEdit extends AppCompatActivity {
Calendar calendarFromDB = Calendar.getInstance();
При получении даты из БД установить её только что созданому календарю
long currentMillis = cursorId.getLong(1) * 1000;
calendarFromDB.setTimeInMillis(currentMillis);
И в методах с DatePicker использовать этот календарь
private void setInitialDate() {
textViewCalendar.setText(DateUtils.formatDateTime(this, calendarFromDB.getTimeInMillis(), DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR));
}
DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
calendarFromDB.set(Calendar.YEAR, year);
calendarFromDB.set(Calendar.MONTH, month);
calendarFromDB.set(Calendar.DAY_OF_MONTH, dayOfMonth);
setInitialDate();
}
};
public void changeDate(View view) {
new DatePickerDialog(this, date, calendarFromDB.get(Calendar.YEAR), calendarFromDB.get(Calendar.MONTH), calendarFromDB.get(Calendar.DAY_OF_MONTH)).show();
}
Теперь при открытии календаря DatePicker устанавливает дату из БД, а если не открывать календарь, то сохранится дата так же из БД.

