我嘗試了很多這裏提供的各種帖子的答案,但沒有爲我工作。使用FragmentStatePagerAdapter後重復的菜單和碎片中的數據
問題-我有導航抽屜有6個片段,但單個活動。一切工作正常,直到我改變抽屜中排名第一的片段。我想要在第一個片段中滑動標籤。所以我用FragmentStatePagerAdapter
。
每個片段都有自己的菜單以及MainActivity菜單。
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Notify the system to allow an options menu for this fragment. setHasOptionsMenu(true); }
而膨脹是這樣的:
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.story, menu); }
,一切工作正常。但是,當我訪問導航抽屜中的其他片段時,它會在工具欄中顯示重複的菜單。如果我訪問其他片段時工具欄中留有空間,它會創建更多重複項。
嘗試1:要解決這個問題,我最初使用:
@Override
public void onPrepareOptionsMenu(Menu menu) {
menu.clear();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.story, menu);
}
有了這個,我沒有得到重複的菜單,但現在我沒有看到MainActivity menus
。
嘗試2:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
getActivity().invalidateOptionsMenu();
inflater.inflate(R.menu.story, menu);
}
有了這個,我得到兩個片段和活動菜單,但重複的存在。
這應該很容易解決,但我沒有采取一種方法來處理這個問題。也許我不太瞭解生命週期?
我的其他方法 - 在Fragments中實現所有菜單都能做到,但這應該是我們最後的選擇。
解決這一 - 既保持菜單上的所有我需要做的就是這個(非常簡單的解決方案):
menu.clear();
inflater.inflate(R.menu.story, menu);
getActivity().getMenuInflater().inflate(R.menu.main, menu);
問題從1片段2OnOptionsItemSelected
方法獲取調用其他片段。
所以基本上你想在所有的片段常用菜單項目從activity_menu文件進來,並從休息片段是對的? – Droidwala
在其他片段中,如果您不想菜單,請爲它們調用'setHasOptionsMenu(false);'。 – Piyush
@Droidwala是的。 – Roon13