ツールバーとナビゲーションドロワーがあります。アプリを起動すると、ツールバーとナビゲーションドロワーが作成されます。ナビゲーションドロワーのアイテムをクリックすると、新しいフラグメントが開始され、同じツールバーが保持されます。特定のフラグメントを開始するときに、基本的に検索、追加、編集などのメニュー項目をツールバーに追加するにはどうすればよいですか?プログラムの開始時にそれらは必要ありませんが、動的に作成されます。また、これらのボタンをクリックして、他のフラグメントを開始させる方法を教えてください。あるフラグメントで、ツールバーの編集ボタンが別のフラグメントの編集ボタンと比較して特定のことを行うようにしたいのです。ありがとう!
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"
/>
同様のコードをフラグメントに追加します。
@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);
}
これにより、フラグメントのメニューをカスタマイズできます。
これはメニューを動的に作成する方法です: 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);
それを行う最良の方法:
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);
}
}
すべてのフラグメントでonCreateOptionsMenu
メソッドをオーバーライドします。
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.your_menu_xml, menu);
super.onCreateOptionsMenu(menu, inflater);
}
この問題を正しく解決しました。私の解決策は次のコードです:
@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);
}
同じ問題があり、表示されたフラグメントに応じてツールバーメニューを置き換えたいと思いました。
私が今直面している問題は、メニューが前のものに追加されることです。
フラグメントのメニューのみを表示するには、以下をお勧めします。
@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);
}
それが役立つことを願っています。
以下は、さまざまなフラグメントでさまざまなメニューオプションを表示する手順です。
ステップ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)
}