MenuInflater究竟是如何工作的?

时间:2014-08-07 09:35:43

标签: 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);
}

2 个答案:

答案 0 :(得分:10)

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

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

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


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

答案 1 :(得分:2)

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

查看:Build Menus in Android with Java and XML: Introduction

来自文章:

  

一旦菜单资源文件(my_menu.xml)准备就绪并具有全部功能   您打算添加的项目,您可以使用MenuInflater覆盖   函数onCreateOptionsMenu。这个功能应该填补   带有所需菜单项的菜单对象,但Android的MenuInflater   class帮助您从提到的XML资源创建菜单项   上述