应该"android:onOptionsItemSelected"返回true或false

kle*_*ver 50 android

在onOptionsItemSelected中......我看到了一些在switch块中不同的代码.

案例1(通常看到)

public boolean onOptionsItemSelected (MenueItem item)
       switch (item.getItemId()){
             case R.id.item1:
             startActivity (new Intent (this, PrefsActivity.class));
             break;
       }
       return true
Run Code Online (Sandbox Code Playgroud)

案例2(不确定为什么这样设置)

public boolean onOptionsItemSelected(MenuItem item) {
       switch (item.getItemId()) {
               case MENU_NEW_GAME:
               newGame();
               return true;
       }
       return false;
Run Code Online (Sandbox Code Playgroud)

我的问题

案例1和案例2之间有什么区别?

Wil*_*ate 52

kleaver,

根据文档 onOptionsItemSelected()

返回

boolean返回false以允许正常菜单处理继续,true在此处使用它.

如果返回true,则onOptionsItemSelect()调用将使用click事件,并且不会通过其他项目单击函数.如果您返回false,则可以在其他项目选择功能中检查事件的ID.

您的方法仍然有效,但可能会导致对其他函数的不必要调用.ID最终将通过这些函数掉落,因为没有切换来捕获它,但返回false更正确.


Lok*_*ari 36

根据文档
真实 - >事件消耗在这里,现在它不应转发其他事件
false - >转发其他事件消耗

当我们处理多个片段并且每个片段都有自己的Options菜单并覆盖OnOptionItemSelected(主要是在平板电脑设计中)时,这种布尔返回类型实际上是有益的.

在这种情况下,android跟踪每个片段的OnOptionItemSelected()方法,以避免这种情况

a)如果任何片段在onOptionsItemSelected()中消耗事件,则返回"true"(停止),否则返回"false"
b)如果我们返回false则它将跟踪其他连接片段的onOptionsItemSelected()
方法,直到它结束所有片段或某人消耗它.

在此输入图像描述

这里我试图从图解释
绿色边界是片段-1和红色边界是片段-2
两个片段都有自己的Optionmenu我已经突出显示

现在如果我们点击任何OptionmenuItem它将检查onOptionsItemSelected()的实现片段

如果任何片段正在消耗事件onOptionsItemSelected返回true,那么它将永远不会尝试其他片段,我们可以减少Android操作系统的开销.