2011-12-22 60 views
1

我有一个ListViewActivity使用AsyncTask加载数据库中的数据。此活动有一个选项菜单,用于检查onPrepareOptionsMenu()中活动列表视图中是否有任何数据项。从AsyncTask刷新ActionBar

如果有项目,我启用ActionBar上显示的允许用户删除项目的选项之一。

现在,当活动启动时,AsyncTask启动,并且在AsyncTask仍在运行时运行onPrepareOptionsMenu(),此菜单项从未启用,除非设备被翻转并且listview数据作为实例,绕过AsyncTask。

所以,在的AsyncTask的onPostExecute(),我叫invalidateOptionsMenu(),但似乎并没有被刷新菜单(我在onCreateOptionsMenu()onPrepareOptionsMenu()调试代码,也不被触发)。任何帮助赞赏。

+0

按正确它应该工作。不明白为什么它不应该是你的asynctask是当前活动的内部类?还是单独上课? – Rejinderi 2011-12-22 02:21:57

+0

当前活动的内部类 – 2011-12-22 02:30:15

+1

我假设你正在调用'MyActivity.this.invalidateOptionsMenu()'对吗?你可以尝试我的建议和调试? – Rejinderi 2011-12-22 02:35:09

回答

0

该问题与坏的全局变量值有关。我用onPrepareOptionsMenu()方法编写了一个全局布尔值的代码,该代码从来不是真的,并且将调试语句INSIDE置于布尔检查中......导致调试语句从不运行。

解决了这个问题后,一切都按预期工作,上面的代码是正确的。

1

您可以尝试在您的活动和onPostExecute()上创建一个像haveData这样的全局布尔值,相应地将布尔值设置为true或false。然后根据布尔值对您的onPrepareOptionsMenu()进行检查并相应地启用菜单项。

我最后一次尝试它为我工作不知道为什么它不适合你。如果不起作用,请从那里进行调试,告诉我们它不在哪里执行。

+0

它帮了我很多,谢谢 – Shajo 2015-01-25 12:12:04