onCreateOptionsMenu()调用super

时间:2012-04-24 18:31:10

标签: android android-optionsmenu

我正在使用 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);
}

我应该使用什么?

2 个答案:

答案 0 :(得分:31)

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

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

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

答案 1 :(得分:3)

onCreateOptionsMenu()的来源如下:

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

其中mParent是当前活动的父活动。如果您的活动扩展android.app.Activity,那么最后可以返回true而不用担心调用super,因为默认实现会尝试显示基于父活动的菜单,你可能不想要。