Android TabActivity 中的奇怪选项菜单行为

Posted

技术标签:

【中文标题】Android TabActivity 中的奇怪选项菜单行为【英文标题】:Strange options menu behavior in Android TabActivity 【发布时间】:2011-02-12 00:59:53 【问题描述】:

我有一个带有四个选项卡的TabActivity(每个选项卡都有自己的活动)。每个选项卡都定义了自己的onCreateOptionsMenu(在某些情况下,onPrepareOptionsMenu)。加载每个选项卡时,会启动 AsyncTask 以检索填充该选项卡列表所需的数据。

如果我非常快速地在选项卡之间切换(当它们仍在加载时),然后按下菜单按钮(当当前选项卡的 AsyncApiTask 仍在运行时),我可能会出现错误的选项菜单。

例如,假设FooActivity(标签 1)有一个带有“刷新”项的选项菜单,而BarActivity(标签 2)有一个带有“查看全部”项的选项菜单。如果我启动应用程序(激活选项卡 1),快速切换到选项卡 2,然后点击菜单,有时会显示“刷新”项(而不是预期的“查看全部”项)。

此外,虽然这种奇怪的行为有时只发生在第一次按下菜单时(后来按下显示正确的项目),但有时它会“卡住”,每次按下时都会出现错误的项目,直到我切换标签。

知道会发生什么吗?我以前没有听说过这种情况,也找不到任何好的建议。

【问题讨论】:

这是我讨厌将活动用作选项卡内容的众多原因之一。让您的选项卡成为简单的视图,并让您的 single onPrepareOptionsMenu() 委托给基于活动选项卡的实现。 啊,太好了,很高兴知道我没有做任何严重错误的事情来导致这种情况。我会考虑这个解决方案。谢谢! 【参考方案1】:

是的,CommonsWare 建议是一个更好的解决方案!您甚至可以考虑为每个选项卡使用FragmentTabHost 和片段。这样主机活动就可以从onTabChanged(String tab) 集中更新选项菜单。

虽然AsyncTask 是从Activity 生成的,但如果它还没有运行onPostExecute(...),它仍然会运行。此外,由于AsyncTasks 的默认行为是可变的(不同版本的android 顺序/并行运行它们),如果没有您自己的ThreadPoolExecutor,很难控制。您快速的Activity 切换和重复的AsyncTasks 似乎阻塞了。

【讨论】:

以上是关于Android TabActivity 中的奇怪选项菜单行为的主要内容,如果未能解决你的问题,请参考以下文章

Android:从 tabActivity 到活动的参数为空

软件测试作业1:android手机应用布局之TabActivity

在 android 中是不是可以在屏幕底部放置 TabActivity 选项卡图标? [复制]

继承的tabactivity怎么用appcompatactivity代替并实现tabactivity的的效果

Android TabActivity 和动态 Tabs 屏幕方向问题

学习Android之第六个小程序新浪微博(ListView和TabActivity)