Java语法解释-getMenuInflater()

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().

刚刚下载了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().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对象