2012-04-24 133 views
34

我使用创建应用程序选项菜单。我发现它的几个例子,但每个人都在使用不同的地方super.onCreateOptionMenu()onCreateOptionsMenu()方法。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); 
} 

我应该用什么?

回答

29

这取决于你想要做什么。第一个例子将放置你的菜单和只有你的菜单。第二个,将添加第一个超类菜单。最后一个会先添加你的菜单。但是,请记住,菜单中还有一个订单字段,在提交时会考虑到这一点。

假设您正在扩展已有菜单的活动,但您不希望该菜单显示为另一个菜单。在这种情况下,你会使用第一种方法。

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

3

源为onCreateOptionsMenu()如下:

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

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