2015-10-20 18 views
2

如何从我的片段访问我的菜单,然后更改其中一个菜单项的图标?如何从片段中更改菜单项图标?

我在做什么是查询我的本地数据库,看看是否存在片段时显示某个条目。如果它确实显示一个固定的图标,如果没有,则显示一个轮廓图标。

+0

像[这里](HTTP: //stackoverflow.com/questions/27440133/custom-options-menu-for-every-fragment)? – Blackbelt

回答

7

在您的片段onCreate()方法中,您可以使用setHasOptionsMenu(true)来允许您的片段处理不同于其根目录的菜单项。 所以你可以做这样的事情在你的片段:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setHasOptionsMenu(true); 
} 

然后,您可以覆盖任何在你的片段菜单生命周期方法:

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.menu_fragment, menu); 
    // You can look up you menu item here and store it in a global variable by 
    // 'mMenuItem = menu.findItem(R.id.my_menu_item);' 
} 

@Override 
public void onPrepareOptionsMenu(Menu menu) { 
    super.onPrepareOptionsMenu(menu); 
    MenuItem menuItem = menu.findItem(R.id.menu_item_to_change_icon_for); // You can change the state of the menu item here if you call getActivity().supportInvalidateOptionsMenu(); somewhere in your code 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    // Handle actions based on the id field. 
} 
+0

非常感谢! – Micro

+0

关键部分调用'getActivity()。supportInvalidateOptionsMenu();'在我的代码中的任何位置刷新菜单。它效果很好。 – Micro

相关问题