Java语法解释 - getMenuInflater()

时间:2015-06-06 01:17:09

标签: java android syntax

刚刚下载了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方法。

有人可以为我揭开这一行的语法吗?

5 个答案:

答案 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"/>

您可以根据需要添加菜单列表

菜单看起来像 enter image description here

答案 4 :(得分:0)

对不起,我知道答案已经接受。
但是我想我可以提供一些见识并获得一些健康的批评:

MenuInflater是 Android系统资源。它是在Android启动时创建的。它是一个持久对象,对其的引用始终在内存中可用。
上下文类的每个子类,即您可以通过以下方式调用活动

  1. getMenuInflater()来自类(例如:上下文)或其任何子类(例如:活动
  2. <any_context_object>.getMenuInflater()来自课堂之外。

内部:

getMenuInflater()检查内存中是否存在MenuInflater对象,然后:

  • 如果它确实存在于内存中,它将返回该对象。
  • 否则,它将创建一个并返回它。它的行为类似于Java 工厂方法
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;
}