MenuInflater究竟是如何工作的?

Pen*_*ake 5 java android

如果我到目前为止,MenuInflater是一种可以膨胀(炸毁,扩展?)菜单类型对象的对象.但是何时调用该方法以及哪个Menu对象自动传入?getMenuInflater()做什么(或者它只是... =新的MenuInflater()的另一种方式)?然后,一旦创建了inflater对象,.inflate究竟做了什么?传入的菜单对象对我的main.xml菜单有什么作用?

(如果我一次提出太多问题,我很抱歉.)

public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(Menu);
}
Run Code Online (Sandbox Code Playgroud)

Ant*_*ues 11

A MenuInflater是能够Menu从xml资源(当然只有菜单资源)创建的对象,即:构造Menu给定菜单资源标识符的新实例.

onCreateOptionMenu(Menu)当按下设备的菜单按钮被调用时,或任一Activity.openOptionsMenu()被调用.

菜单的实际呈现由活动处理.在它显示之前,Activity将菜单传递给您,以便您可以使用自己的项目填充它,然后显示它.
所以Android承诺,因为渲染菜单不是你的业务,你不应该控制实际传递给你的菜单onCreateOptionsMenu.


至于ActionBar,onCreateOptionsMenu填充时调用ActionBar,以便菜单中的选项可用ActionBar.此方法仅Activity在创建后调用一次.如果您想稍后修改菜单,则应改为覆盖Activity.onPrepareOptionsMenu


Adr*_*ian 5

我对“膨胀”的理解是“读取”资源文件(描述布局或 GUI 元素的 XML 文件)并“创建”与其对应的实际对象;这将使菜单对象在 Android 应用程序中可见。 MenuInflater类代表一个 Android 框架类,专门用于从菜单资源文件解析和构建菜单。

看一看:使用 Java 和 XML 在 Android 中构建菜单:介绍

从文章:

一旦菜单资源文件 (my_menu.xml) 准备好并包含您要添加的所有项目,您就可以使用 MenuInflater 来覆盖 onCreateOptionsMenu 函数。此函数应该用所需的菜单项填充菜单对象,但 Android 的 MenuInflater 类可帮助您从上述 XML 资源创建菜单项