2012-11-03 204 views
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()永遠不會被調用,所以按鈕保持禁用狀態。

那麼,一旦我的後臺線程返回,我怎麼能使該按鈕啓用,我知道我可以啓用它?

乾杯 - Mike。

回答

7

要麼調用invalidateOptionsMenu()並在onCreateOptionsMenu()中添加一個檢查來啓用/禁用或以編程方式創建菜單,並將Menu實例保存在某處,以便稍後啓用它。

+0

美麗,這比我期待的更容易! – Coyttl

1

上面說的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); 
} 

或總是加載相同的菜單資源,只是禁用或隱瞞事實後,相機按鈕。

+0

單行代碼優化getMenuInflater()。inflate(isCamButtonEnabled?R.menu.cam_enabled_menu:R.menu.cam_disabled_menu,menu);' –