zoukankan      html  css  js  c++  java
  • android Fragment中使用Toolbar

    在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>

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

  • 相关阅读:
    洛谷 P1032 字串变换
    洛谷 P1027 Car的旅行路线
    洛谷 P1024 一元三次方程求解
    洛谷 P1018 乘积最大
    洛谷 P1023 税收与补贴问题
    洛谷 P3456 [POI2007]GRZ-Ridges and Valleys
    洛谷 P1183 多边形的面积
    codeforces 407C Curious Array
    codeforces 12D Ball
    codeforces 388D Fox and Perfect Sets(线性基+数位dp)
  • 原文地址:https://www.cnblogs.com/klord/p/10482364.html
Copyright © 2011-2022 走看看