У меня есть 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 по выбору?