操作栏“操作按钮”以编程方式禁用/启用?

时间:2012-11-03 02:02:36

标签: android android-actionbar

回到另一个。试图获得我必须与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()永远不会被调用,因此按钮保持禁用状态。

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

干杯 - 麦克

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:2)

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

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

或始终加载相同的菜单资源,然后在事后禁用或隐藏相机按钮。