2013-07-05 41 views
1

我有一個菜單項,我想以編程方式更改其可見性。菜單是這個以編程方式更改菜單項在android中不起作用

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/pencil" 
     android:orderInCategory="100" 
     android:showAsAction="always" 
     android:visible="true" 
     android:title="@string/for_pencil"/> 

</menu> 

然後在我的代碼一些在那裏我有

((MenuItem) findViewById(R.id. pencil)).setVisible(false); 

錯誤:

E/AndroidRuntime(13845): FATAL EXCEPTION: main 
E/AndroidRuntime(13845): java.lang.ClassCastException: com.android.internal.view.menu.ActionMenuItemView cannot be cast to android.view.MenuItem 

任何整理了這一點幫助?

+0

如果您在活動dinamically添加菜單,你需要無效的菜單。當它被重新創建,那麼你只是不添加你想要的物品。如果來自資源文件,我假設您加載了菜單,並且將其添加到活動中,您可以刪除或隱藏不需要的部分。 覆蓋onCreateOptionsMenu(菜單菜單) 有活動菜單的句柄。 – soynerdito

回答

17

由於您沒有提供任何其他代碼,所以我不能多說這些。

但是,只要您想更改菜單,您應該撥打invalidateOptionsMenu()。它所做的是使菜單失效,這反過來又強制它被重新創建。在其娛樂期間,其中一個回調是onPrepareOptionsMenu(Menu menu)。這是您可以對菜單進行更改的地方。

例子:

// This is where I want to change the menu. Can be anywhere in your activity. 
invalidateOptionsMenu(); 

然後重寫此方法

// Override this method to do what you want when the menu is recreated 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.findItem(R.id.pencil).setVisible(false); 
    return super.onPrepareOptionsMenu(menu); 
} 
+0

太棒了。這是動態菜單項的最佳解決方案。 –

相關問題