안드로이드 개발 질문/답변
(글 수 45,052)
구글 개발자 사이트를 보니 ICS부터는 showDialog를 웬만하면 이용하지 말라고 합니다.
( showDialog(상수) 로 달력을 팝업으로 띄우면 처음 클릭을 제외하고는 그 이후부터 2번 클릭해야 달력 팝업이 뜹니다.
혹시 이에 대한 해결책을 알려주시면 더 감사하겠습니다.)
그래서 DialogFragment를 확장해서 만들었는데.. (그냥 개발자 사이트에 있는거 썻습니다.)
private class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar c = Calendar.getInstance();
int cyear = c.get(Calendar.YEAR);
int cmonth = c.get(Calendar.MONTH);
int cday = c.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, cyear, cmonth, cday);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// To-Do
}
}
이렇게 할 경우 버튼 클릭시 달력은 잘 뜹니다만......
날짜를 10월5일로 바꾸고 설정을 누르면 날짜 설정또한 잘 됩니다.
그러나, 다시 클릭할 때 10월5일로 뜨는게 아니라 10월11일, 즉 오늘 날짜로 뜹니다.
왜 그럴까요? 간단하게 이야기하면 달력을 띄울때는 항상 오늘날짜로 설정되어 있습니다.
Calenger.getInstance() 가 달력에 설정된 날짜를 가져오는거 아닌가요?
왜 그런지 ㅁ모르겠습니다.
Calendar.getInstance() 는 '지금' 현재를 반환합니다. 대화창을 띄운 다음 Picker를 조정하여 다른 날짜를 선택하고 대화창이 닫혔다고 하더라도 시스템의 날짜를 바꾸지 않았다면 새로 대화창을 띄울 때 Calendar.getInstance() 에 따라 지금 날짜로 또 열리는 것입니다.
아까 선택한 달력 날짜를 계속 유지하여 새로 창을 띄우고 싶다면 year/month/day 를 저장해두기면 하면 되겠군요.