TabActivity
5x をホストするがありますFragmentActivity
。onClick()
これらのいくつかには、またはonItemClick()
で新しいフラグメントを作成してプッシュするボタンまたはリストが含まれています。
ほとんどの場合、これは問題なく機能しますが、反応が鈍かったり、テスターがばかげたことをしたりした場合 (ボタンまたはリスト項目を押したままにし、別の指を使用してタブを切り替え、ボタン/リストを放します) -- 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 の登録を解除onSaveInstanceState
することでこれが 100% 防止されるかどうかはわかりません。すべてのフラグメントのすべてのボタンに対してそれを行うのは一種の PITA です。- 誰かが関連するフラグメントの をチェックすることを提案しました
isAdded()
が、それが機能しないことを確認できます。 - フラグを設定し
onSaveInstanceState()
てonRestoreInstanceState()
onClick() で確認することもできますが、これもまた、面倒なことです。編集:ああ、フラグメントには がありませんがonRestoreInstanceState()
、フラグをいじることはできonResume()
ます。
私が見逃しているこれに対する正しい修正はありますか、それとも選択したクラッジを使用する必要がありますか?