【问题标题】:What does onPrepareOptionsMenu do?onPrepareOptionsMenu 有什么作用?
【发布时间】:2013-05-21 10:40:45
【问题描述】:

我想为Android制作Option Menu,我已经访问了这个网站。在他们的脚本中,我找到了onPrepareOptionsMenu,我尝试使用带有和不带有onPrepareOptionsMenu 的Android 2.3.3 编译器进行编译和运行,两者都有效,但我没有发现任何区别。

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

onPrepareOptionsMenu 方法实际上是做什么的?那个方法重要吗?我可以删除该方法吗?


加法

哦,我也听说过 Android 3.0 中的 Action Bar,它说 Action Bar 是 make Option Menu 的替代方式,它使用 onPrepareOptionsMenu。对吗?

谢谢...

【问题讨论】:

  • 请阅读文档。它就是为此而创建的。如果您不了解它的具体作用,请询问它。 developer.android.com/reference/android/app/…
  • @ZouZou:抱歉,我是 Android 新手,在你告诉我之前我不知道有文档。谢谢。
  • 当用户按下菜单按钮(物理或操作栏上的)时调用它。

标签: android menu optionmenu


【解决方案1】:

看看API

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

【讨论】:

  • 谢谢!! “动态修改内容”这句话说明一切!!
  • @Tutompita 如果这个答案让您满意,您可以将其标记为正确。
  • 如果动态修改内容可以通过例子来解释就更好了
【解决方案2】:

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

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

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

【讨论】:

  • 为什么要禁用菜单选项?能否举例说明我们需要禁用菜单选项的情况?
  • 我已经举了一个例子。如果此答案让您满意,您可以将其标记为正确,和/或将其标记为有用。
  • 感谢您提供的示例,它让我对这种方法有了另一个想法。我见过一个带有三个垂直点的应用程序,但它在我的 2.3.4 Android 中运行。他们是怎么做到的?
  • 我只用过 Android 4 及更高版本,所以也许你应该再问一个问题。
  • 我的最低 Android 版本是 4.0,所以我只使用 ActionBar。我从未在 Android 中使用过任何其他类型的选项菜单。请注意,您无法控制是否获得溢出菜单的三个垂直点,或者溢出菜单是否转到硬件菜单按钮。如果有硬件菜单按钮,那么我熟悉的所有Android版本都会自动将其用于ActionBar溢出。
【解决方案3】:

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

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

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

【讨论】:

  • 嗨,谢谢你的回答,我有一个问题,每次我点击一个菜单项 onPrepareOptionsMenu 都会被调用,(我已经在那里放了一个日志),不应该调用一次吗仅在显示活动时?该应用程序运行良好,我只是担心这一点。
  • onCreateOptionsMenu 仅被调用一次。 Prepare 被多次调用。这是正常的,只有在遇到性能问题时才需要担心。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2011-07-17
  • 2014-09-13
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多