반응형
내 LG의 LTE2 모델의 경우 저런 오류(?)가 발생한다. 저렇게 표시만 되면 다행인데, 취소버튼이 없어서 뒤로가기 버튼을 눌러도 '설정'버튼을 누른 이벤트가 정상적으로 실행이 되고, '저장'버튼을 누른 경우 '설정'버튼을 누른 것 같은 이벤트가 2회 발생한다.
구글링결과 안드로이드 특정 버전에서 위와 같은 오류가 알려져있다고 한다.
이를 해결하기 위해서 소스를 간단히 수정해 보았다.
// 한번만 실행하기 위한 체크변수 int nCheck = 0; @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: // 날짜선택 다이얼로그 호출 DatePickerDialog dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { if (nCheck == 0) { nCheck = 1; /** 프로그램에 맞게 수정하는 메소드 */ updateDisplayForDate(year, monthOfYear, dayOfMonth); } } }, nYear, nMonth, nDay); dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { nCheck = 1; removeDialog(DATE_DIALOG_ID); } }); dialog.setButton(DatePickerDialog.BUTTON_NEGATIVE, "취소", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // '취소'버튼에 대한 이벤트 처리 nCheck = 1; removeDialog(DATE_DIALOG_ID); } }); dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { // 뒤로가기 버튼에 대한 이벤트 처리 if (keyCode == KeyEvent.KEYCODE_BACK) { nCheck = 1; } return false; } }); return dialog; } } @Override protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { if (id == DATE_DIALOG_ID) { if (((DatePickerDialog)dialog).getButton(DatePickerDialog.BUTTON_POSITIVE) != null) { ((DatePickerDialog)dialog).getButton(DatePickerDialog.BUTTON_POSITIVE).setText("설정"); } nCheck = 0; } }
급하게 수정하여 배포해야 하는 프로그램이 있어서 좀 어거지스럽게(?) 코딩을 하였습니다.
끝.
반응형