如果我到目前为止,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);
}
答案 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资源创建菜单项 上述