欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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>

实现在标题栏菜单处点击“编辑”就会在原来位置上显示“取消”,点击“取消”显示“编辑”。