У меня есть TabActivity
, который содержит 5x FragmentActivity
. Некоторые из них содержат кнопки или списки, которые в своих onClick()
или onItemClick()
создают и нажимают новый фрагмент.
По большей части это прекрасно работает, но если вещи немного не реагируют, или тестер делает что-то глупое (нажмите и удерживайте кнопку или элемент списка, используйте другой палец для переключения вкладок, затем отпустите кнопка/список - 100% воспроизводимая), я получаю событие click после того, как действие приостановлено и сохранено. См. Фрагмент журнала:
10-30 17:05:16.258 3415 3415 D BKC DEBUG: More.onSaveInstanceState()
10-30 17:05:16.258 3415 3415 D BKC DEBUG: MoreFragment.onPause()
10-30 17:05:17.309 3415 3415 D BKC DEBUG: MoreFragment.onItemClick()
После прочтения этой статьи и различных вопросов StackOverflow о потере состояния фрагмента я не вижу хорошего ответа, как исправить это.
- Использование
commitAllowingStateLoss()
(безоговорочно) - это обходной путь, который может скрыть настоящие ошибки. - Я не уверен, что отмена регистрации
OnClickListener
иOnItemClickListener
вonSaveInstanceState
будет на 100% предотвращать это, и это вроде PITA, чтобы сделать это для каждой кнопки в каждом фрагменте. - Кто-то предложил проверить соответствующий фрагмент
isAdded()
, но я могу подтвердить, что он не работает. - Я могу установить флаг в
onSaveInstanceState()
иonRestoreInstanceState()
и проверить это в onClick(), но опять же, это просто kludge. EDIT: О, фрагмент не имеетonRestoreInstanceState()
, но я могу обвести флаг вonResume()
или что-то еще.
Есть ли правильное исправление для этого, которое мне не хватает, или я должен просто пойти с моим kludge по выбору?