2012-03-09 23 views
14

誰かが、フラグメント内で起こっていることに基づいてアクティビティアクションバーの内容を変更する方法の簡単な例を教えていただけますか?私の意図:Android:フラグメントからアクションバーのメニューアイテムを変更する

通常のメニュー項目 - >フラグメント内の何かが移動されます - >メニュー項目が保存/破棄ボタンに変わります。

私の最初のインパルスは、アクティビティとフラグメントの両方でブロードキャストレシーバをセットアップすることですが、これが正しいかどうかはわかりません。

答えて

7

以下は私のために働く。私は、フラグメント内ListView.MultiChoiceModeListenerを実装するカスタムクラスを持っている:

public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { 
    // Choose the correct Action Bar menu to display 
    int menu = myCondition == true ? R.menu.my_default_menu : R.menu.my_menu_2; 

    // Configure to use the desired menu 
    mode.getMenu().clear(); 
    MenuInflater inflater = getActivity().getMenuInflater(); 
    inflater.inflate(menu); 
} 

あなたは「断片で何かが動いた」検出方法を考えると、ListView.MultiChoiceModeListenerを拡張することはあなたのために動作しない可能性があり、うまくいけば、これはメニューを変更する方法を示しています。鍵はActionModeインスタンスにアクセスすることです。

+0

ここで、アクティビティのActionModeのインスタンスを取得できますか? – Neilers

4

contextual action modeを使いたいと思います。ドラッグイベントでは、新しいActionModeを開始します。これは、アクションバーの内容を、ユーザに許可したいメニュー項目に置き換えることができます。ユーザーがアクションを選択すると、アクションモードが終了し、アクションバーは元の状態に戻ります。

20

フラグメントはアクションバーのメニューを変更できます。そのためには、フラグメントのoncreate()に必要なフラグを追加する必要があります。setHasOptionsMenu(true);

フラグメントがロードされると、アクティビティと同様にonCreateOptionsMenu(Menu menu, MenuInflater inflater)に電話がかかります。次に、メニューに必要な変更を行います。

メニューをグローバルに分割して保存し、変更を加えたいときはいつでも適用します。

ONATTACH(アクティビティアクティビティ)を使用してFragmentActivityからアクションバーを取得するには、これを試してみてくださいアクションバーのインスタンスがメニューあなたと一緒に役立つだろう、しかし確実に有用であると考えられる場合

+1

これははるかに正しい答えです。 –

1

わからないが...ここではそれについて取得する方法ですメソッドの中にあります。 YourFragmentクラスの

まず第一に、この

public class YourFragment extends Fragment { 

    private YourFragmentActivity context; 
} 

のような断片にあなたのFragmentActivityのグローバルオブジェクトを作成オーバーライドこの

@Override 
public void onAttach(Activity activity){ 
    context = (YourFragmentActivity)activity; 
    super.onAttach(activity); 
} 

はその後YourFragmentでのOnCreateメソッドでこの

を行います
@Override 
public View onCreateView(LayoutInflater inflater, 
         ViewGroup container, Bundle savedInstanceState){ 
    ... 

    android.support.v7.ActionBar actionBar = context.getSupportActionBar(); 

    ... 
} 
関連する問題