2013-12-19 20 views
6

Fragment私のMainActivityで膨らんだMenuItemの可視性を設定する方法を探しています。異なるフラグメントのActionBarアイテムの可視性を設定するにはどうすればいいですか

詳細については、actionBarSherlockzxing、および一部のgoogle servicesを使用しています。

アプリケーションは、(私はMain Fragmentに戻って私が戻ってタッチを押すと別の部分に切り替えるたびに、FragmentStackを操作します)

ここでは私のメニュー:私はメニューを膨らませるところ

<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; 
} 
0123を

希望します。

+2

これは私が複数のフラグメント(タブ)との間にアクションアイテムの可視性を制御するために使用し、正確にパターンです –

+2

私はアンドリューとFllo同じパターンを使用! うまく動作します – Ektos974

+0

作品、ありがとう:) – SAndroidD

1

あなたは、あなたが膨張したいものメニューを示すフラグを設定する必要がありますフラグメントを変更したいときにあなたがしなければならないすべてはあなたが別のメニューを膨らませる設定を再度onCreateOptonsMenuを呼び出すために、あなたの活動にinvalidateOptionsMenu()を呼び出し、あなたのフラグを使用しています

0

私はトリックを見つけました。これを試してみてください。

public void displayMenu(boolean show) { 
     setHasOptionsMenu(show); 
     getActivity().invalidateOptionsMenu(); 
} 
関連する問題