2013-12-19 88 views
6

我正在尋找一種方法來設置在我的MainActivity中膨脹的MenuItem的可見性,具體取決於我所在的Fragment如何設置不同片段中ActionBar項目的可見性

有關信息:我正在使用actionBarSherlockzxing和一些google services

應用程序用抽屜式導航(帶ABS)建,也是我操縱這樣的方式我,每次我切換到另一個片段FragmentStack當我按下觸摸揹我回來在我的Main Fragment

這裏我的菜單:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:id="@+id/button_generator" android:title="GENERER" android:icon="@drawable/ic_drawer"></item> 
</menu> 

這裏就是我吹菜單:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    Log.d(TAG, "================= onCreateOptionsMenu ================= fragSt: " + fragmentStatus); 
    this.getSherlock().getMenuInflater().inflate(R.menu.main, menu); 

    mGenQrFromContacts = menu.findItem(R.id.button_generator); 


    return true; 
} 

我試過定意here的解決方案,但對我來說是不行的。

回答

13

你應該在你Fragment試試這個:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // ... 
    // call the method setHasOptionsMenu, to have access to the menu from your fragment 
    setHasOptionsMenu(true); 

    //... 
} 

// the create options menu with a MenuInflater to have the menu from your fragment 
@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    menu.findItem(R.id.button_generator).setVisible(true); 
    super.onCreateOptionsMenu(menu, inflater); 
} 

而這一點,在你的Activity

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getSupportMenuInflater().inflate(R.menu.my_layout, menu); 
    menu.findItem(R.id.button_generator).setVisible(false); 
    return true; 
} 

希望這會有所幫助。

+2

這正是我用來控制多個片段(標籤)之間的行動項目可見模式 –

+2

我用同樣的方式安德魯和Fllo! 工程就好了 – Ektos974

+0

它的工作原理,謝謝:) – SAndroidD

1

當你想改變片段,您將需要設置一個標誌,表示要充氣什麼菜單,那麼所有你所要做的就是調用invalidateOptionsMenu()在您的活動再次和呼叫onCreateOptonsMenu使用標誌設置你吹一個不同的菜單

0

我找到了一招,你可能想試試這個。

public void displayMenu(boolean show) { 
     setHasOptionsMenu(show); 
     getActivity().invalidateOptionsMenu(); 
}