2015-12-18 56 views
1

我嘗試了很多這裏提供的各種帖子的答案,但沒有爲我工作。使用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方法獲取調用其他片段。

+0

所以基本上你想在所有的片段常用菜單項目從activity_menu文件進來,並從休息片段是對的? – Droidwala

+0

在其他片段中,如果您不想菜單,請爲它們調用'setHasOptionsMenu(false);'。 – Piyush

+0

@Droidwala是的。 – Roon13

回答

1
private void hideAllMenuItems() { 
     if (actionBarMenu != null) { 
      actionBarMenu.findItem(R.id.action_item1).setVisible(false); 
      actionBarMenu.findItem(R.id.action_item2).setVisible(false); 
     } 
    } 


    private void showMenuIcon() { 
     if (actionBarMenu != null) { 
      hideAllMenuItems(); 
      if (currentFragment instanceof Fragment1) 
       actionBarMenu.findItem(R.id.action_item1).setVisible(true); 

      else if (currentFragment instanceof Fragment2) 
       actionBarMenu.findItem(R.id.action_item2).setVisible(true); 

     } 
    } 

調用shoeMenuIcon()每一次新的片段負荷..

希望你正在尋找這個

相關問題