这个方法做什么 super.onCreateOptionMenu() 和 super.onOptionsItemSelected(item)

Fai*_*med 2 android oncreateoptionsmenu

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

任何人都可以帮助我我会产生什么效果

1)如果我返回 true

2)如果我返回 false

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

谁能用一个很好的例子向我解释一下这一点。我还是很困惑。

God*_*ave 5

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

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

if return true ==>>> 这意味着你想看到你已经膨胀的选项菜单。如果 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);
}
Run Code Online (Sandbox Code Playgroud)

根据文档 true --> 事件已消耗 现在不应转发其他事件 false --> 转发以供其他事件消耗

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

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

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

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

你的第三个答案是 KrishnaJ 写的

super.onCreateOptionMenu()super.onOptionItemSelected

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