web-dev-qa-db-ja.com

Androidツールバーさまざまなフラグメントのメニュー項目の追加

ツールバーとナビゲーションドロワーがあります。アプリを起動すると、ツールバーとナビゲーションドロワーが作成されます。ナビゲーションドロワーのアイテムをクリックすると、新しいフラグメントが開始され、同じツールバーが保持されます。特定のフラグメントを開始するときに、基本的に検索、追加、編集などのメニュー項目をツールバーに追加するにはどうすればよいですか?プログラムの開始時にそれらは必要ありませんが、動的に作成されます。また、これらのボタンをクリックして、他のフラグメントを開始させる方法を教えてください。あるフラグメントで、ツールバーの編集ボタンが別のフラグメントの編集ボタンと比較して特定のことを行うようにしたいのです。ありがとう!

Menu_toolbar:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">

<item Android:id="@+id/edit"
    Android:orderInCategory="1"
    Android:title="Edit"
    app:showAsAction="always"
    Android:icon="@drawable/pencil_icon"/>
<item Android:id="@+id/add"
    Android:orderInCategory="1"
    Android:title="Add"
    app:showAsAction="always"
    Android:icon="@drawable/plus_icon"/>

ツールバー:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="55dp"
Android:background="#10a1ff"
Android:title="Home"
/>
67
Joe Eigi

同様のコードをフラグメントに追加します。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
    View v = inflater.inflate(R.layout.library_fragment, parent, false);
    setHasOptionsMenu(true);
    return v;
}


@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
   inflater.inflate(R.menu.your_menu_xml, menu);
   super.onCreateOptionsMenu(menu, inflater);
}

これにより、フラグメントのメニューをカスタマイズできます。

130
Gundu Bandgar

これはメニューを動的に作成する方法です: http://www.101apps.co.za/index.php/articles/using-toolbars-in-your-apps.html

編集済み:

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);
actionBarToolBar.setNavigationIcon(R.drawable.icon);
actionBarToolBar.setNavigationContextDescription(getResources().getString(R.string.desc);
actionBarToolBar.setLogo(R.drawable.other_icon);
actionBarToolBar.setLogoDescription(getResources().getString(R.string.other_desc);
actionBarToolBar.inflateMenu(R.menu.fragment_menu);
30
Allen Chan

それを行う最良の方法:

1。アクティビティでツールバーを検索し、supportActionBarとして設定します。

Toolbar actionBarToolBar = (Toolbar) findViewById(R.id.my_toobar);
setSupportActionBar(actionBarToolBar);

2。その後、同じアクティビティの異なるフラグメントのオプションメニューを処理するのは簡単です。必要に応じて各フラグメントで次のことを実行してください。

OnCreateViewメソッド呼び出しで

setHasOptionsMenu(true);

そして最後に、

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}

メニュー項目のクリックを管理するために、onOptionsItemSelectedがあります。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_search :
            Log.i("item id ", item.getItemId() + "");
        default:
            return super.onOptionsItemSelected(item);
    }
}
20
Prateek Gupta

すべてのフラグメントでonCreateOptionsMenuメソッドをオーバーライドします。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.your_menu_xml, menu);
    super.onCreateOptionsMenu(menu, inflater);
}
7
Ellie Zou

この問題を正しく解決しました。私の解決策は次のコードです:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    mRootView = inflater.inflate(R.layout.fragment_order_history, container, false);
    //getActivity().invalidateOptionsMenu();


    setHasOptionsMenu(true);

    return mRootView;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);
}
4
Hai Rom

同じ問題があり、表示されたフラグメントに応じてツールバーメニューを置き換えたいと思いました。

私が今直面している問題は、メニューが前のものに追加されることです。

フラグメントのメニューのみを表示するには、以下をお勧めします。

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
     menu.clear(); //Empty the old menu
     inflater.inflate(R.menu.menu_fragment1, menu);
     super.onCreateOptionsMenu(menu, inflater);
}

それが役立つことを願っています。

2
Matteo Gariglio

以下は、さまざまなフラグメントでさまざまなメニューオプションを表示する手順です。

ステップ1:setHasOptionsMenu(true)を呼び出す

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        setHasOptionsMenu(true)
        super.onViewCreated(view, savedInstanceState)

    }

Step2:フラグメント関連のオプションメニュー項目を膨らませます。

override fun onCreateOptionsMenu(menu: Menu?, inflater: MenuInflater?) {
    // To clear previously added menu items
    menu?.clear()
    inflater?.inflate(R.menu.your_fragment_menu, menu)
    super.onCreateOptionsMenu(menu, inflater)
}
1
takharsh