【问题标题】:Menu onClick attribute and method argument菜单 onClick 属性和方法参数
【发布时间】:2014-02-03 11:31:34
【问题描述】:

我正在练习添加菜单项并尝试对菜单项点击做出反应。根据开发者的guide,上面写着:

提示:Android 3.0 增加了使用 android:onClick 属性为 XML 中的菜单项定义点击行为的功能。该属性的值必须是活动使用菜单定义的方法的名称。该方法必须是公共的并接受单个 MenuItem 参数——当系统调用此方法时,它会传递所选的菜单项。有关详细信息和示例,请参阅菜单资源文档。

但是,同一页面中的示例代码不遵循规则:方法不传递 MenuItem 参数。示例代码为:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.new_game:
            newGame();
            return true;
        case R.id.help:
            showHelp();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

我的问题是:方法调用不应该是 newGame(MenuItem item) 和 showHelp(MenuItem item),而不是 newGame() 和 showHelp()?当我自己测试时,实际上需要 (MenuItem item) 参数,否则即使编译正确,应用也会崩溃。

任何帮助将不胜感激。

【问题讨论】:

    标签: android android-menu


    【解决方案1】:

    onOptionsItemSelected 是定义onClick 属性的替代方法以及在 Android 3.0 之前可用的属性(如果您想向后兼容,这很重要)。它只是提供相同工艺流程的不同方式。当然,onClick 有可能在运行时使您的应用程序崩溃,而不是 onOptionsItemSelected 不处理菜单项(只是导致它什么也不做)。

    【讨论】:

    • 哦,听起来我可以使用其中任何一个,但不能一起使用。我应该试试这个。我想我读错了指南:s
    • 谢谢。事实上,我需要的只是 onClick,没有 onOptionItemSelected :)
    猜你喜欢
    • 2013-03-16
    • 2017-08-08
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多