本文主要是介绍Fragment中添加toolbar-menu,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应用中常常会遇到这种需求:
Activity中有不同的Fragment,如MainActivity,二不同的Fragment要求有不同的toolbar,menu。
那么如何自定义Fragment的toolbar呢?
1. 在fragment的xml中添加toolbar;
2. 在fragment的onCreate方法中添加setHasOptionsMenu(true);
@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setHasOptionsMenu(true);//加上这句话,menu才会显示出来}
3. 初始化toolbar.
mToolbarContact = view.findViewById(R.id.tool_bar_contact);
((AppCompatActivity) getActivity()).setSupportActionBar(mToolbarContact);
4.重写onCreateOptionsMenu:
@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {//menu.clear();//这句话没用,不必加inflater.inflate(R.menu.menu_contacts, menu);super.onCreateOptionsMenu(menu, inflater);}
5. 重写onOptionsItemSelected:
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();if (id == R.id.menu_add_contact) {T.showToastBro(getActivity(), item.getTitle().toString());}if (id == R.id.menu_nearby_businesses) {T.showToastBro(getActivity(), item.getTitle().toString());}return super.onOptionsItemSelected(item);}
然后发现fragment的menu和activity的menu重叠。
-
问题出在第3步,要改为:
mToolbarContact = view.findViewById(R.id.tool_bar_contact);
mToolbarContact.inflateMenu(R.menu.menu_contacts);
-
然后发现menu的点击事件不相应。即使已经加了setHasOptionsMenu(true);
第4、5都不用重写,要toolbar代码实现点击事件
mToolbarContact = view.findViewById(R.id.tool_bar_contact);
mToolbarContact.inflateMenu(R.menu.menu_contacts);
mToolbarContact.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {int id = item.getItemId();if (id == R.id.menu_add_contact) {T.showToastBro(getActivity(), item.getTitle().toString());}if (id == R.id.menu_nearby_businesses) {T.showToastBro(getActivity(), item.getTitle().toString());}return true;}});
解决!
这篇关于Fragment中添加toolbar-menu的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!