0

ActionBar (Sherlock) に 2 つのタブがあります。場合によっては、ユーザーが現在のタブを離れようとした場合に確認を求め、確認されない場合はタブの変更を停止したいことがあります。これは主に、ユーザーが他のタブで設定をいじる前にプロセスを停止したことが原因です。

私が TabHost を使用していたとき、タブ自体に OnTouchListener を使用するかなり醜いが実行可能なソリューションがあったため、実際に処理される前にイベントをインターセプトできました。ActionBar タブにはタッチ リスナーを設定できないようです。

現在、ActionBar には、FragmentTransaction のデタッチとアタッチを処理する TabListeners があります。取引をキャンセルする簡単な方法はありますか?onTabUnselected と onTabSelected をチェックして、対応するデタッチ操作とアタッチ操作を行わなくてもよいと思いますが、少し複雑に感じます。

タブの変更を停止するのがあまりにもばかげているように聞こえる場合は、他の提案も受け付けています。

4

1 に答える 1

1

わかりました、誰かがここでつまずいた場合に備えて、私がやったことは次のとおりです。タブが変更されたり、タブビューを取得してタッチリスナーをアタッチしたりするのを止める合理的な方法が見つかりませんでした。控えめに言っても、イライラします。

代わりに、ユーザーを元のタブに戻したい場合に備えて、TabListener を使用して空のフラグメントをアタッチしました。このフラグメントの onResume() で、2 番目のタブに進むか最初のタブに戻るかを選択できるダイアログを開きました。どちらの場合でも、アクション バーの setSelectedNavigationItem() を正しいタブで呼び出すだけで、TabListener が転送を処理し、空のフラグメントを破棄します。

最終的には、実際にはかなりうまく機能します。

于 2012-08-15T19:02:44.933 に答える