2012-12-19 35 views
0

我目前正在一個android項目,我有一點奇怪的問題。它可能非常簡單,但我看不到我做錯了什麼。MenuItem沒有被發現,但正在屏幕上顯示

我已經添加了一個新的菜單項到我的XML文件,然後我試圖引用新菜單項來顯示或隱藏它。當我運行應用程序時,菜單項正顯示在屏幕上,所以我知道我的XML正確並且有正確的文件,但是當我嘗試執行findViewById時,它將返回null。

以下是代碼。

MenuItem mnuUpgrade; 
    mnuUpgrade = (MenuItem)findViewById(R.id.mnu_upgrade); 
      if (common.checkForProVersion()) 
      { 
       //mnuUpgrade.setVisible(false); 
      } 
      else 
      { 
       //mnuUpgrade.setVisible(true); 
      } 

和下面是我的XML文件

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/mnu_addLogin" 
     android:title="New Login" 
     android:icon="@android:drawable/ic_menu_add" 
     android:showAsAction="always"> 
    </item> 
    <item android:id="@+id/mnu_search" 
     android:title="Search" 
     android:icon="@android:drawable/ic_menu_search" 
     android:showAsAction="always"> 
    </item> 
    <item android:id="@+id/mnu_settings" 
     android:title="Settings" 
     android:showAsAction="ifRoom" 
     android:icon="@android:drawable/ic_menu_manage"> 
    </item> 
    <item android:id="@+id/mnu_upgrade" 
     android:title="Upgrade" 
     android:showAsAction="ifRoom" 
     android:icon="@android:drawable/ic_menu_upload"> 
    </item> 
    <item android:id="@+id/mnu_logout" 
     android:title="Log out" 
     android:showAsAction="ifRoom" 
     android:icon="@android:drawable/ic_menu_close_clear_cancel"> 
    </item> 
</menu> 

感謝您的幫助,您可以提供。

回答

2

findViewById無法找到MenuItem。您可以在您的活動中使用onPrepareOptionsMenu。當用戶試圖打開菜單時調用它。你可以試試這個:

@Override 
public boolean onPrepareOptionsMenu (Menu menu) { 
    MenuItem item = menu.getItem(3); 
    // the number is the position of your "upgrade" item in the menu, starting from 0 
    // then check for the pro version 
    if(common.checkForProVersion()) { 
     item.setVisible(false); 
    } else { 
     item.setVisible(true); 
    } 
} 
+0

感謝你的幫助,比我原來做的更好的方式 – Boardy