android Fragment中使用Toolbar
程序员文章站
2022-05-27 22:11:25
在Activity中可以直接使用 就可以重写 onCreateOptionsMenu 和 onOptionsItemSelected 方法; 但是在Fragment中则需要 Fragment中需要将 getActivity()转为AppCompatActivity才能获取setSupportActi ......
在activity中可以直接使用
setsupportactionbar(toolbar);
就可以重写 oncreateoptionsmenu 和 onoptionsitemselected 方法;
但是在fragment中则需要
((appcompatactivity)getactivity()).setsupportactionbar(mtoolbar);
fragment中需要将 getactivity()转为appcompatactivity才能获取setsupportactionbar方法;
还有在fragment中还需要添加一行
sethasoptionsmenu(true);
才能调用 oncreateoptionsmenu 和 onoptionsitemselected 方法;
如果在 oncreateoptionsmenu 方法中存在判断比如当改变某个状态时某些菜单item不显示等,可以使用如下再重新调用 oncreateoptionsmenu 方法
getactivity().invalidateoptionsmenu();
例:
@override protected void initlistener() { ((appcompatactivity)getactivity()).setsupportactionbar(mtoolbar); sethasoptionsmenu(true); } @override public void oncreateoptionsmenu(menu menu, menuinflater inflater) { inflater.inflate(r.menu.menu_edit_select,menu); if(showeditselect){ menu.finditem(r.id.menu_edit).setvisible(true); menu.finditem(r.id.menu_cancel).setvisible(false); }else{ menu.finditem(r.id.menu_edit).setvisible(false); menu.finditem(r.id.menu_cancel).setvisible(true); } } @override public boolean onoptionsitemselected(menuitem item) { switch (item.getitemid()){ //当点击一个条目时,不显示另外一个 case r.id.menu_edit: showeditselect = false; getactivity().invalidateoptionsmenu(); break; case r.id.menu_cancel: showeditselect = true; getactivity().invalidateoptionsmenu(); break; } return true; }
menu_edit_select.xml
<?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/menu_edit" android:title="编辑" android:orderincategory="100" app:showasaction="ifroom|withtext"/> <item android:id="@+id/menu_cancel" android:title="取消" android:orderincategory="101" android:visible="false" app:showasaction="ifroom|withtext"/> </menu>
实现在标题栏菜单处点击“编辑”就会在原来位置上显示“取消”,点击“取消”显示“编辑”。
上一篇: js深浅拷贝