2016-12-27 75 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);