37

我正在使用OptionsMenu创建应用程序。super.onCreateOptionMenu()我找到了几个例子,但是每个人都在使用不同的地方来调用onCreateOptionsMenu()方法。

不同方式的列表:

@Override // without super
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  super.onCreateOptionsMenu(menu);
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
  MenuInflater inflater = getMenuInflater();
  inflater.inflate(R.menu.mymenu, menu);
  return super.onCreateOptionsMenu(menu);
}

我应该使用什么?

4

2 回答 2

35

这取决于你想做什么。第一个示例将放置您的菜单,并且仅放置您的菜单。第二个,将添加第一个超级菜单。最后一个将首先添加您的菜单。但是,请记住,菜单也有一个 order 字段,将在渲染时考虑在内。

假设您正在扩展一个已经有菜单的活动,但您不希望该菜单出现,而是另一个菜单。在这种情况下,您将使用第一种方法。

另一个例子:你正在扩展一个有菜单的活动,并且你想添加另一个菜单。在这种情况下,您可以使用第二种或最后一种方法。

于 2012-04-24T18:33:49.323 回答
3

的来源onCreateOptionsMenu()如下:

public boolean onCreateOptionsMenu(Menu menu) {
    if (mParent != null) {
        return mParent.onCreateOptionsMenu(menu);
    }
    return true;
}

mParent当前Activity的父Activity在哪里。如果您的 Activity 扩展android.app.Activity,则可以true在最后返回而不必担心调用super,因为默认实现将尝试显示基于父 Activity 的菜单,这可能是您不想要的。

于 2012-04-24T18:53:45.540 回答