2

我是安卓新手。我知道以前有人问过这个问题,但是我仍然很困惑。在我的 onCreateOptionMenu() 和 onOptionItemSelected() 中返回它们时,此方法会做什么

谁能帮我我会有什么效果

1)如果我返回真

2)如果我返回假

3)当我返回 super.onCreateOptionMenu() 和 super.onOptionItemSelected 时会发生什么

任何人都可以用一个很好的例子来解释我。我仍然很困惑。

4

4 回答 4

5

好的,我们先看看你感兴趣的两种方法

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

if return true ==>>> 表示你想看到你膨胀的选项菜单。if return false ==>>> 你不想显示它

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }
    // Activate the navigation drawer toggle
    if (mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

根据文档 true --> Event Consumed now 它不应该转发给其他事件 false --> 转发给其他事件

当我们使用多个片段并且每个片段都有自己的选项菜单和 OnOptionItemSelected 的覆盖(主要在平板电脑设计中)时,这种布尔返回类型实际上会受益

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

a) 如果任何片段正在消耗 onOptionsItemSelected() 中的事件,则返回“true”,否则返回“false”

b)如果我们返回false,那么它将跟踪其他连接的片段的(onOptionsItemSelected)方法,直到它结束所有片段或有人消费它。

你的第三个答案是 KrishnaJ 写的

super.onCreateOptionMenu()super.onOptionItemSelected

如果你写这个然后它会首先调用你的父类这个方法如果你扩展这个类中的任何类。如果方法也在父类中,它将作为父类工作。

于 2016-08-11T05:02:02.593 回答
1

好的。我问你:

问题1:

在我的 onCreateOptionMenu() 和 onOptionItemSelected() 中返回它们时,此方法会做什么

答:

onCreateOptionMenu()用于操作栏中的膨胀菜单。

onOptionItemSelected()用于捕获该菜单的 onclick

问题 2:

如果我返回真或假

答:

参考!!!如果您在该文件中有膨胀的菜单或单击了定义的菜单,则应该返回 true。否则你应该返回假。所以编译器会在其他页面中找到男性或菜单项。

例如。你有一个活动和两个片段,那么如果在活动中找不到菜单或菜单项,那么编译器会在片段中找到它。如果您返回 true,则无需进一步搜索。

问题3:

为什么要使用超级?

答:

所以编译器知道在这个文件中没有用户定义的菜单或项目值。

于 2016-08-11T05:01:01.447 回答
0

我喜欢在回答 Dnyanesh 时添加您的第三个问题答案

super.onCreateOptionMenu()super.onOptionItemSelected

如果你写这个然后它会首先调用你的父类这个方法如果你扩展这个类中的任何类。如果方法也在父类中,它将作为父类工作。

于 2016-08-11T04:51:55.897 回答
0

onCreateOptionMenu() 方法用于创建选项菜单。

onOptionsItemSelected() 方法用于处理选项菜单的事件,即触发了哪个菜单操作以及该操作的结果应该是什么等。

于 2016-08-11T04:48:43.807 回答