2015-10-20 17 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

相關問題