35

I want to make Option Menu for Android, I have visit this site. In their script, I found onPrepareOptionsMenu, I try to compile and run using Android 2.3.3 compiler with and without onPrepareOptionsMenu, both works, but I didn't see any difference.

public boolean onCreateOptionsMenu(Menu menu){
    //code here
}
    
public boolean onOptionsItemSelected(MenuItem item){
    //code here
}
    
public boolean onPrepareOptionsMenu(Menu menu){
    //code here
}

What is actually onPrepareOptionsMenu method do? Is that method important? Could I just delete the method?


Addition

Oh, I also hear about Action Bar in Android 3.0, it says that Action Bar is the alternative way for make Option Menu, and it using onPrepareOptionsMenu. Is that right?

Thank you...

4

3 回答 3

50

看看API

准备要显示的屏幕标准选项菜单。每次显示菜单时,都会在菜单显示之前调用它。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。

于 2013-05-26T10:54:21.313 回答
8

如果您想在向用户显示之前更改菜单,您可以将执行此操作的代码放入onPrepareOptionsMenu. 在某些情况下,我已经动态地使用它来禁用某些菜单选项。

作为一个可能想要禁用菜单选项的示例,我有一个应用程序,其中有一种指定目的地的方法。我的菜单选项之一是计算到目的地的路线。但是,如果未指定目的地,则该选项不适用,因此我曾经onPrepareOptionsMenu在该菜单选项不适用时禁用该选项。

从 Android 3.0 及更高版本开始,就有了 ActionBar,它是一个菜单栏。最重要的项目进入 ActionBar 本身,但是当操作栏上没有足够的空间时就会溢出。可以指定菜单项应始终位于溢出菜单中,而不应位于操作栏本身。在某些设备上,操作栏溢出对应于设备上的永久菜单按钮,而在其他没有菜单按钮的设备上,溢出菜单在操作栏的右侧显示为三个垂直点。

于 2013-05-26T10:54:55.773 回答
4

onCreateOptionsMenu 在首次创建活动时被调用一次。如果它返回 false,则不显示任何选项菜单,并且永远不会调用 onPrepareOptionsMenu。

如果 onCreateOptionsMenu 返回 true,则在显示活动之前也会调用 onPrepareOptionsMenu,并且每次选项菜单无效时也会调用。如果您需要在创建项目后启用/禁用、显示/隐藏或添加/删除项目,请使用 onPrepareOptionsMenu。

如果您的菜单没有改变,请使用 onCreateOptionsMenu。

于 2017-09-02T18:09:21.657 回答