5

4 つのタブがありTabActivityます (それぞれが独自のアクティビティです)。各タブは独自のonCreateOptionsMenu(場合によってはonPrepareOptionsMenu) を定義します。各タブが読み込まれると、AsyncTaskそのタブのリストに入力するために必要なデータを取得するために が開始されます。

タブを非常にすばやく切り替えて (読み込み中)、メニュー ボタンを押すと (現在のタブAsyncApiTaskがまだ実行中)、間違ったオプション メニューが表示されることがあります。

たとえば、FooActivity(タブ 1) には「更新」項目のあるオプション メニューがあり、BarActivity(タブ 2) には「すべて表示」項目のあるオプション メニューがあるとします。(タブ 1 がアクティブな状態で) アプリを起動し、すぐにタブ 2 に切り替えてからメニューをクリックすると、(予期される「すべて表示」項目ではなく) 「更新」項目が表示されることがあります。

さらに、この奇妙な動作は、最初にメニューを押したときに発生することがありますが (後で押すと正しい項目が表示されます)、「スタック」して、タブを切り替えるまで押すたびに間違った項目が表示されることがあります。

何が起こっているのでしょうか?このようなことは聞いたことがなく、良い提案を見つけることができませんでした。

4

1 に答える 1

0

はい、CommonsWare の提案はより良い解決策です! 各タブにFragmentTabHostとフラグメントを使用することも検討できます。こうすることで、ホスト アクティビティが からオプション メニューを一元的に更新できますonTabChanged(String tab)

AsyncTaskから生成されますActivityが、実行されていないonPostExecute(...)場合は引き続き実行されます。また、 s のデフォルトの動作は可変であるため (異なるバージョンの Android では順次/並列に実行されます)、独自のThreadPoolExecutorAsyncTaskなしで制御することは困難です。素早い切り替えと繰り返されるs がブロックされているようです。ActivityAsyncTask

于 2013-09-17T20:16:53.447 に答える