Java语法解释-getMenuInflater()
刚刚下载了android studio,我正在使用big nerd ranch的android编程指南来学习诀窍 启动android studio时,此代码已存在于主活动文件中:Java语法解释-getMenuInflater(),java,android,syntax,Java,Android,Syntax,刚刚下载了android studio,我正在使用big nerd ranch的android编程指南来学习诀窍 启动android studio时,此代码已存在于主活动文件中: @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. **getMenuInflater().
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
**getMenuInflater().inflate(R.menu.menu_quiz, menu);**
return true;
}
我不理解getMenuInflater
行。在我使用java的短暂经验中,当使用句点分隔二者时,只有一个对象出现在方法之前,例如在dog.bark()
中。这里的行表示调用在getMenuInflater方法中定义的充气方法。但是,我检查了getMenuInflater()
的源代码,它的主体中没有充气方法
有人能帮我解释一下这一行的语法吗?您正在扩展一个活动,android studio为您添加了这一行来配置布局的菜单,下面是活动类中方法的实际实现:
public MenuInflater getMenuInflater() {
// Make sure that action views can get an appropriate theme.
if (mMenuInflater == null) {
initWindowDecorActionBar();
if (mActionBar != null) {
mMenuInflater = new MenuInflater(mActionBar.getThemedContext(), this);
} else {
mMenuInflater = new MenuInflater(this);
}
}
return mMenuInflater;
}
行
getMenuInflater()。充气(R.menu.menu\u测验,menu)
是以下内容的简称:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_quiz, menu)
这将类似于在名为menu.xml的Res文件夹中自动创建菜单
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/slideshowbutton"
android:icon="@drawable/settings"
android:title="@string/settings"/>
<item android:id="@+id/editbutton"
android:icon="@drawable/adduser"
android:title="@string/adduser"/>
<item android:id="@+id/cropbutton"
android:icon="@drawable/message"
android:title="@string/message"/>
<item android:id="@+id/detailsbutton"
android:icon="@drawable/logout"
android:title="@string/Logout"/>
您可以根据需要添加菜单列表
菜单看起来像
我不太清楚您对什么感到困惑,但我相信您认为必须始终在对象名称之后进行方法调用。这基本上是正确的,(除了静态方法),所以您可以像
this.getMenuInflater()
这是Java中的一个关键字,指调用该方法的当前对象。对不起,我知道答案已被接受
但我认为,我可以提供一点见解并获得一点健康的批评:
MenuInflater是一个Android系统资源。它是在android启动时创建的。它是一个持久对象,对它的引用在内存中始终可用
上下文类的每个子类,即您案例中的活动,都可以通过调用以下命令获得对它的引用:
.getMenuInflater()
来自类外。
getMenuFlater()
检查内存中是否存在MenuFlater对象,然后:
- 如果它确实存在于内存中,则返回该对象
- 否则,它将创建一个并返回它。它的行为类似于Java工厂方法
public MenuInflater getMenuInflater(){
//确保动作视图可以获得适当的主题。
如果(MMENUILLATER==null){
initWindowDeCoctionBar();
如果(mActionBar!=null){
mMenuInflater=new MenuInflater(mActionBar.getThemedContext(),this);
}否则{
mMenuInflater=新的MenuInflater(本);
}
}
回流式充气机;
}
Hmm。。。膨胀(R.menu.menu_quick,menu)在哪里发挥作用?你膨胀菜单就像用xml布局膨胀活动一样,你通过xml在/menu foldergetMenuInflater()下添加菜单项返回一个对象,这样你就可以使用它而不是一个有趣的对象。。。这对我来说可能是最好的解决办法。非常感谢。哈哈,现在我还有一个问题。如何将对象引用变量设置为方法?例如,在MenuInflater=getMenuInflater()中,您不是在设置方法,而是在设置调用方法getMenuInflater()的结果,在本例中是MenuInflater对象