onCreateOptionsMenu()和onOptionsItemSelected()的使用

书籍

《第一行代码 Android》第三版

开发 环境

Android Studio Jellyfish | 2023.3.1

创建Menu资源

在《第一行代码 Android》中的3.2.5 在Activity中使用Menu章节中,根据书中指引,在res/目录下创建menu目录,然后在menu目录下创建main.xml的布局资源.

menu:必选标签。用来定义一个菜单,菜单内所有的选项(item)都需要写在<menu/>标签内,同时它也是整个 menu 资源文件的根节点。(这个在创建main.xml时android studio自动生成menu的部分代码)
item:必选标签。用来创建一个菜单项,每一个<item/>标签代表 menu 中的一个选项,另外在 <item/>中我们还可以嵌套定义<menu/>节点,以此来创建一个子菜单。(此段代码中我们创建了两个item,分别是add_item和remove_item)
(这段代码的具体意思书中讲解的比较清楚,因此不在此处细讲,可参考书中内容.)

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>

</menu>

重写onCreateOptionsMenu()方法

本人基本上是没有java/android基础的,onCreateOptionsMenu()和onOptionsItemSelected()都是首次使用,重写的代码的细节直接看《第一行代码 Android》描述即可,此处我想简单整理一下关于这两个函数的定义:

onCreateOptionsMenu()顾名思义是创建选项菜单, Activity 创建 Option Menu 的时候系统会回调此函数,我们需要在该函数内绑定我们定义的菜单main.xml的资源.

menuInflater.inflate()表示调用getMenuInflater()中的inflate()给当前Activity创建菜单.

R.menu.main表示的指定res/menu/main.xml中的菜单资源;

menu是入参中的menu,原文中"第二个参数用于指定我们的菜单项将添加到哪一个Menu对象当中,这里直接使用onCreateOptionsMenu()方法中传入的menu参数。"我目前不是很理解.因为如上所说的onCreateOptionsMenu()是创建菜单时主动回调的函数,那么其参数在哪里传进来的我不知道.希望有经验的哥们可以指导一下.

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
//        return super.onCreateOptionsMenu(menu)
        menuInflater.inflate(R.menu.main, menu)
        return true
    }

原文中,"最后给这个方法返回 true,表示允许创建的菜单显示出来,如果返回了false,创建的菜单将无法显示。"

可是我将true改为false,重新编译下载程序,这个菜单还是可见的,是我对这句话的理解有问题吗?希望有经验的哥们可以指导一下.

重写onOptionsItemSelected()

这个内容比较简单,就是重写onOptionsItemSelected()函数,这个函数是菜单响应事件, 当用户在菜单中点击了某个选项之后,Android 系统会回调onOptionsItemSelected()方法,并传入被选菜单项的 Menu 实例.

函数内部比较简单,就是用when条件语句判断传进来的itemId,对应执行不同的动作.

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
//        return super.onOptionsItemSelected(item)
        when (item.itemId) {
            R.id.add_item->Toast.makeText(this, "Add", Toast.LENGTH_SHORT).show()
            R.id.remove_item -> Toast.makeText(this, "Remove", Toast.LENGTH_SHORT).show()
        }
        return true
    }

参考连接

34. 【Android教程】菜单:Menu_android menu菜单样式-CSDN博客

  • 8
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值