Activity使用Toolbar
一般在Activity里使用Toolbar如下:
toolbar.xml
xml调用:
Activity一般写到基类:
Activity调用:
Fragment使用Toolbar
现在项目需求,每个title不一样,就不能像以上一样写一个toolbar,放在最外层。问题来了,Fragment如何使用Toolbar?像上面一样写吗?No,Fragment没有setSupportActionBar,于是Google,得到:
这样就解决Fragment使用Toolbar,却抛出了一个问题:Fragment标题错乱。
Fragment标题错乱
当出来这个问题时,我恍然大悟,Fragment里的Toolbar findViewById取的都是MainActivity,include不能共用一个ID,应该加个ID区别一下:
BaseFragment 做相应的修改:
好的,这样标题就没有错乱了,然后又来了新的“需求”:Fragment如何让Toolbar菜单生效?
Fragment让Toolbar菜单生效
在activity中:
在Fragment中:
两者不同的地方在于:
1、一个有返回值(boolean类型),一个没有返回值。
2、Fragment中onCreateOptionsMenu的参数多了一个MenuInflater
想让Fragment中的onCreateOptionsMenu生效必须先调用setHasOptionsMenu方法,否则Toolbar没有菜单。
setHasOptionsMenu方法源码如下:
单独使用而不与ActionBar进行关联
多谢@XZoomEye提示,对于Fragment使用Toolbar思维被局限了,在Android Toolbar一文中介绍了单独使用而不与ActionBar进行关联,直接使用ToolBar的inflateMenu方法,Menu的事件也是独立的,需要通过设置ToolBar的setOnMenuItemClickListener来实现,这样做就不会发生标题错乱。