Торговый дом ЮгАгроТехника


Непонятная ошибка #4#



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 он
проигнорировал и не нули какие-нибудь показал), но отобразилось это как-то
криво.

  Blister.rar
680K



вернуться