我想在运行时替换用于ActionBar项目的图标(它显示为ActionBar上的操作项)。我正在尝试以下方法:
private Map<Integer, Integer> mPendingReplacements =
new HashMap<Integer, Integer>();
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.my_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
for (Map.Entry<Integer, Integer> it : mPendingReplacements.entrySet()) {
MenuItem item = menu.findItem(it.getKey().intValue());
if (item != null) {
item.setIcon(getResources().getDrawable(it.getValue().intValue()));
}
}
mPendingReplacements.clear();
return true;
}
private void replaceMenuItemIcon(int menuItemId, int drawable) {
mPendingReplacements.put(menuItemId, drawable);
invalidateOptionsMenu();
}
private void onUserClickedSomeButton() {
replaceMenuItemIcon(R.id.foo, R.drawable.grok);
}
------------更新-----------
更新了以上示例,以按照Selvin的建议使用mPendingReplacements。我可以看到它执行为例外,但操作栏图标仍然不会立即更改。将继续深入探讨这一点,但如果我遗失了什么,有人能发现吗?
谢谢