1

带着另一个回来。试图获得什么小应用程序我必须与 3.0+ Android 版本合作,并且有一些我不知道如何处理的东西..

我有一个选项菜单,我对其进行了升级以更好地适应操作栏,定义为:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:titleCondensed="@string/menu_sheet_photo_comp" android:title="@string/menu_sheet_photo" android:id="@+id/mnuCamera" android:icon="@android:drawable/ic_menu_camera" android:showAsAction="ifRoom" />
    <item android:titleCondensed="@string/menu_sheet_notes_comp" android:title="@string/menu_sheet_notes" android:id="@+id/mnuLogText" android:icon="@drawable/ic_menu_compose" />
    <item android:titleCondensed="@string/menu_sheet_track_comp" android:title="@string/menu_sheet_track" android:id="@+id/mnuTrack" android:icon="@android:drawable/ic_menu_compass" />
    <item android:titleCondensed="@string/menu_sheet_geocache_comp" android:title="@string/menu_sheet_geocache" android:id="@+id/mnuGC" android:icon="@drawable/ic_menu_emoticons" android:showAsAction="ifRoom" />

这一切都可以正常工作 - 当活动运行时,照片(第一张)显示在我手机的操作栏上,其他都没有。现在,选项的可用性取决于几件事。

因此,在 Activity 启动开始时,会发送一个线程来获取 Web 数据。我onCreateOptionsMenu()禁用了第一项。(在我们取回网络数据验证它可以拍照之前,他们不能拍照。)

在我的应用程序的早期版本中,这很容易 -onPrepareOptionsMenu()我检查状态,然后根据需要启用或禁用选项。现在,这就是我不知道该怎么做 -

由于相机按钮在操作栏上,而不是在溢出菜单中,当用户点击它时,onPrepareOptionsMenu()它永远不会被调用,所以按钮保持禁用状态。

那么,一旦我的后台线程返回并且我知道我可以启用它,我将如何启用该按钮?

干杯 - 迈克。

4

2 回答 2

7

要么调用 invalidateOptionsMenu() 并在 onCreateOptionsMenu() 中添加一个检查以启用/禁用,要么以编程方式创建菜单并将 Menu 实例保存在某处,以便稍后启用它。

于 2012-11-03T02:19:26.233 回答
2

stoilkov 上面所说的是我使用的方法。更明确地说,在您的后台线程返回时,设置一个标志,我们将其称为 isCamButtonEnabled,为 false,然后调用 invalidateOptionsMenu()。这将触发 onCreateOptionsMenu 被调用以重新生成您的菜单。最后一步是修改 onCreateOptionsMenu 以根据 isCamButtonEnabled 的状态禁用相机按钮。您可以通过加载完全不同的菜单资源来做到这一点:

if(isCamButtonEnabled) {
    getMenuInflater().inflate(R.menu.cam_enabled_menu, menu);
} else {
    getMenuInflater().inflate(R.menu.cam_disabled_menu, menu);   
}

或者总是加载相同的菜单资源并在事后禁用或隐藏相机按钮。

于 2012-11-03T02:31:13.603 回答