刚刚下载了android studio,我正在使用大书呆子牧场的android编程指南来学习绳索。
启动android studio时,此代码已存在于主活动文件中:
@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方法中定义的inflate方法。但是,我检查了getMenuInflater()
的源代码,并且其正文中没有inflate方法。
有人可以为我揭开这一行的语法吗?
答案 0 :(得分:3)
第getMenuInflater().inflate(R.menu.menu_quiz, menu);
行是此简短形式:
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu_quiz, menu)
答案 1 :(得分:2)
您正在扩展一个活动,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;
}
答案 2 :(得分:1)
我不太确定您对此感到困惑,但我相信您认为必须始终在对象名称之后进行方法调用。这基本上是正确的(静态方法除外)所以你可以把这个调用想象成
this.getMenuInflater()
这是Java中的一个关键字,指的是调用方法
的当前对象答案 3 :(得分:0)
这将类似菜单,将在名为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"/>
您可以根据需要添加菜单列表
菜单看起来像
答案 4 :(得分:0)
对不起,我知道答案已经接受。
但是我想我可以提供一些见识并获得一些健康的批评:
MenuInflater是 Android系统资源。它是在Android启动时创建的。它是一个持久对象,对其的引用始终在内存中可用。
上下文类的每个子类,即您可以通过以下方式调用活动:
getMenuInflater()
来自类(例如:上下文)或其任何子类(例如:活动)<any_context_object>.getMenuInflater()
来自课堂之外。
getMenuInflater()
检查内存中是否存在MenuInflater对象,然后:
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;
}