진저브레드까지 지원하는 앱을 개발하고 있습니다.
초단위까지 지원하는 TimePicker가 필요하여 기본 TImePicker와 Button, TextView를 이용한 조잡한 다이얼로그를 만들어 사용하였습니다.(동작 잘됨)
그래서 이번엔 layout-v11을 따로 만들어서 허니콤 이전 버전은 기존 다이얼로그를 사용하고 허니콤 후 버전은 layout-v11에 있는 앨리어스 xml을 사용하도록 하고, 새 xml에는 TimePicker와 NumberPicker를 LinearLayout으로 묶었습니다.
그리고 onCreateDialog에서 updateDialog를 콜해서 TimePicker랑 NumberPicker에 제가 넣고 싶은 시각을 셋팅합니다.
public Dialog onCreateDialog(Bundle savedInstanceState) {
// view 셋팅 ....
updateDialog();
}
protected void updateDialog() {
Log.i(TAG, "updateDialog called");
timePicker.setCurrentHour(mPickerTime.get(Calendar.HOUR_OF_DAY));
timePicker.setCurrentMinute(mPickerTime.get(Calendar.MINUTE));
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
secondTextField.setText(String.valueOf(mPickerTime
.get(Calendar.SECOND)));
} else {
secondPicker.setValue(mPickerTime.get(Calendar.SECOND));
}
}
그리고 아래 콜백을 오버라이딩했습니다.
timePicker.setOnTimeChangedListener(new OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hour, int minute) {
mPickerTime.set(Calendar.HOUR_OF_DAY, hour);
mPickerTime.set(Calendar.MINUTE, minute);
getArguments().putSerializable(EXTRA_TIME, mPickerTime);
Exception ex = new Exception();
ex.printStackTrace();
}
});
젤리빈 디바이스에서 테스트 해보면 실제 inflate도 잘되고
getTargetFragment().onActivityResult(getTargetRequestCode(),
resultCode, i);
코드도 잘 동작하는 등 에러나는 것은 없는데, 유독
최초 Dialog를 show할 때 아무런 터치도 없었는데 오버라이딩한 onTimeChanged(..) callback이 난데없이 호출되면서 꼭 Minute Picker만 현재 시스템 시각의 분으로 바꿔버립니다. Hour부분이랑 NumberPicker는 제가 지정한대로 이상 없이 잘 동작하고요.
Exception ex = new Exception();
ex.printStackTrace();
위에 코드를 넣어서 onTimeChanged(..)의 콜스택을 봐도 잘 모르겠고요, Hour도 같이 바뀌면 제가 실수했구나 하는데 Minute만 바꾸는 onTimeChanged(..)가 호출되니 미치겠네요.
06-25 14:52:12.544: I/TimePickerFragment(894): updateDialog called
06-25 14:52:12.554: W/System.err(894): java.lang.Exception
06-25 14:52:12.564: W/System.err(894): at com.sephiron.clocksynchronizer.TimePickerFragment$1.onTimeChanged(TimePickerFragment.java:75)
06-25 14:52:12.564: W/System.err(894): at android.widget.TimePicker.onTimeChanged(TimePicker.java:649)
06-25 14:52:12.564: W/System.err(894): at android.widget.TimePicker.setCurrentHour(TimePicker.java:471)
06-25 14:52:12.564: W/System.err(894): at android.widget.TimePicker.setCurrentHour(TimePicker.java:446)
06-25 14:52:12.574: W/System.err(894): at com.sephiron.clocksynchronizer.TimePickerFragment.updateDialog(TimePickerFragment.java:181)
06-25 14:52:12.574: W/System.err(894): at com.sephiron.clocksynchronizer.TimePickerFragment.onCreateDialog(TimePickerFragment.java:153)
06-25 14:52:12.574: W/System.err(894): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
06-25 14:52:12.574: W/System.err(894): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
06-25 14:52:12.574: W/System.err(894): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
06-25 14:52:12.574: W/System.err(894): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
06-25 14:52:12.574: W/System.err(894): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
06-25 14:52:12.584: W/System.err(894): at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:446)
06-25 14:52:12.584: W/System.err(894): at android.os.Handler.handleCallback(Handler.java:733)
06-25 14:52:12.584: W/System.err(894): at android.os.Handler.dispatchMessage(Handler.java:95)
06-25 14:52:12.584: W/System.err(894): at android.os.Looper.loop(Looper.java:136)
06-25 14:52:12.584: W/System.err(894): at android.app.ActivityThread.main(ActivityThread.java:5017)
06-25 14:52:12.584: W/System.err(894): at java.lang.reflect.Method.invokeNative(Native Method)
06-25 14:52:12.584: W/System.err(894): at java.lang.reflect.Method.invoke(Method.java:515)
06-25 14:52:12.584: W/System.err(894): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
06-25 14:52:12.584: W/System.err(894): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
06-25 14:52:12.584: W/System.err(894): at dalvik.system.NativeStart.main(Native Method)
06-25 14:52:12.904: W/EGL_emulation(894): eglSurfaceAttrib not implemented
무엇이 잘못된지 아시는 분 계신가요?