我有一个TabActivity
which hosts 5x FragmentActivity
。其中一些包含按钮或列表,它们在onClick()
oronItemClick()
中创建和推送新片段。
在大多数情况下,这工作正常,但如果事情有点反应迟钝,或者测试人员做了一些愚蠢的事情(按住按钮或列表项,使用不同的手指切换选项卡,然后释放按钮/列表-- 100% 可重现),在活动暂停并保存后,我得到了点击事件。查看日志片段:
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
s 和OnItemClickListener
s inonSaveInstanceState
是否会 100% 阻止这种情况,对于每个片段中的每个按钮都这样做是一种 PITA。 - 有人建议检查相关片段的
isAdded()
,但我可以确认这不起作用。 - 我可以在 onClick() 中设置一个标志
onSaveInstanceState()
并onRestoreInstanceState()
检查它,但同样,这只是一个杂牌。编辑:哦,fragment 没有,但我可以在其中或其他任何onRestoreInstanceState()
地方玩弄标志。onResume()
我是否缺少正确的解决方法,或者我应该选择我的kludge吗?