2016-12-27 132 views
1

如何從工具欄中將圖標更改爲使用bbdd中顯示的方法獲得的新圖標。 問題是我無法訪問更新活動以便能夠更改圖標的事件。 我嘗試使用onPrepareOptionsMenu方法,但我無法使其工作。 我一直沒有能夠通過將代碼放入onStart來做到這一點,因爲它告訴我菜單對象是空的或無效的。將圖標更改爲工具欄Android

public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.clear(); 
    Drawable iconoMenu = obtenerIconoMenuCarro(); 
    getMenuInflater().inflate(R.menu.menu_categorias, menu); 
    menu.getItem(0).setIcon(iconoMenu); 
    return super.onPrepareOptionsMenu(menu); 

} 

    @Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_categorias, menu); 
    Drawable iconoMenu = obtenerIconoMenuCarro(); 
    menu.getItem(0).setIcon(iconoMenu); 
    return true; 
} 

我的活動通過AppCompactActivity擴展並通過AdapterView加載。 當我回到fragmentDialog或下一個活動後,我遇到了問題。

感謝。

+1

本帖](http://stackoverflow.com/questions/19882443/how-to-change-menuitem-icon-in-actionbar-programatically)有許多選項,你想要做什麼。你可以設置全局布爾值,當你想更新菜單項時,通過調用'invalidateOptionsMenu()',將布爾值更改爲true。然後在'onPrepareOptionsMenu'中,如果布爾值爲true,則更改圖標而無需清除菜單。 – Fllo

+0

謝謝,我請求解決問題。 – ferdiado

+1

@ferdiado呃,什麼是'請求'? –

回答

0

對我來說,最簡單的方法是保留對MenuItem的引用以備後用。

當菜單項被充氣時獲取。

MenuItem menuItem; 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main_menu, menu); 

     //find the menu item from the id 
     menuItem = menu.findItem(R.id.myMenuItem); 
     return true; 
    }

然後使用mipmap資源或@drawable將圖像更改爲需要的位置。

menuItem.setIcon(R.mipmap.ic_other_icon);