|
2011-08-11 00:10:58
Антон, такая проблема.
Есть TimePicker. Он положен на диаложку. Запускаем этот диалог. Всё нормально. Теперь поворачиваем телефон (меняем ориентаицю). Поля для выбора часа и минуты устанавливаются в значение минут (т.е. если у нас было выбрано 02:10, то выставится 10:10, а если 02:35, то <Пусто>:35). При этом действительное значение количества часов не сбрасывается: если нажать на плюс в часовом поле, то там появится 03. Как избежать подобной баги? При обычном создании диаложки всё нормально, а когда она пересоздаётся при повороте - такая вот нехорошая штука. Проставление начальных данных в onCreateDialog работает, если создавать диаложку нормально, но вообще ничего не делает, если она пересоздаётся (хотя onCreateDialog вызывается - проверял). Такое ощущение, что какие-то траблы в стандартных onCreate или onSaveInstanceState диаложки. Или что-то с Тайм пикером. Непонятно. Наш проект прилагаю (от того, что на code.google.com лежит, отличается исправленными багами при смене ориентации - раньше всё, что делалось до смены не сохранялось, - как с этой багой разберёмся, выложим туда новую версию). По данной проблеме нас интересует SetTimeWindow, а именно onCreate, onCreateDialog (ADD_DIRECT_ITEM_DIALOG). Тайм пикер сохранён в переменную timePicker. Вот код из onCreateDialog, который подтверждает всё, что я сказал: Log.v("adalx","SetTimeWindow: onCreateDialog: AddDirectItemDialog created"); Log.v("adalx","minutes="+minutes); if (minutes>0) { timePicker.setCurrentMinute(minutes); } else { timePicker.setCurrentMinute(10); minutes=20; }minutes - статическая переменная. Смысл такой - при первом создании диалога в минуты ставим 10, а при следующем 20. Жмём "Add Direct" в окошке, где времена проставляются. Появляется диаложка, в ней проставлено 0 часов 10 минут.меняем ориентацию. Видим 10:10. Прибавляем один час - 01:10. При этом в логах видно, чтоminutes = 20, т.е. должно было бы по идее появиться 20 минут. По-видимому, данные о предыдущем состоянии тайм пикера сохранились (проставление в минуты 20 он проигнорировал и не нули какие-нибудь показал), но отобразилось это как-то криво.
вернуться
|