Android XML OnClick属性失败。不确定为什么

时间:2014-02-21 16:22:58

标签: java android xml onclick

因此,更具体地说,如果我使用视图项(例如按钮),OnClick正常工作。就菜单项而言,它完全失败了。

这是菜单文件夹中的main.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:showAsAction="never"
    android:title="@string/action_settings" 
    android:onClick="openSettings" />
<item
    android:id="@+id/action_high_scores"
    android:orderInCategory="100"
    android:showAsAction="always"
    android:title="@string/action_high_scores" />

以下是MainActivity.java的相关代码:

    public void openSettings(MenuItem item) {
    Intent openSettings = new Intent(getApplicationContext(), Settings.class);
    startActivity(openSettings);
}

我在onCreateOptionsMenu()方法声明之前和之后放置了openSettings方法,但没有区别。

每次都会返回相同的错误:NoSuchMethodException 想法? 提前谢谢。

(更新:我在API 15上没有,这不是API兼容性问题。在菜单列表中使用onClick可以100%使用API​​ 11和更高版本,所以请不要告诉我使用onMenuItemSelected方法。 )

更新:所以我插入了我的平板电脑(API 11,Honeycomb)和POOF!有用! 出于某种原因,API 15,4.0.4 ISC无法使用此功能!?!?! 会有什么想法会导致它? (与此同时,为了兼容性,看起来我可能不得不重写onMenuItemSelected,尽管我的意愿不同。我刚刚遇到API 15的主要错误吗?

4 个答案:

答案 0 :(得分:0)

如果是视图,openSettings(MenuItem item)应为openSettings(View view)

但由于它是一个菜单,因此活动中有特殊方法来处理动作。如果您没有自己设置点击监听器,则覆盖onMenuItemSelected(int featureId, MenuItem item)

(当然这意味着你需要完全从XML中删除onClick)

答案 1 :(得分:0)

这不是事件处理的问题。代码很好。 事实证明,真正的问题是Android 4.0.4 API 15.看来它不仅在我的设备上失败了,而且我在其他地方发现了其他人在使用onClick事件处理时与API 14/15有类似问题的证据在XML菜单中。

请注意,这只是菜单中的onClick问题。 onClick适用于视图。

解决方案?尽管您可能真的想要使用onClick菜单属性,但您不得不重写onMenuItemSelected()。

祝所有遇到同样问题的人好运!

答案 2 :(得分:0)

我想如你所说,这是一个错误。我使用ActionBarActivity时遇到了这个问题。但是我将ActionBarActivity改为FragmentActivity,这个问题“解决了”。

希望这可以帮助解决您的问题。

答案 3 :(得分:0)

要使onClick侦听器在XML中工作,您需要添加两个属性: android:clickable="true" android:onClick="myFunction"

这两个属性都是使onClick侦听器工作所必需的。但就其XML属性而言,菜单项只能是可检查的而不是可点击的。

当您在XML中键入菜单项时,Android Studio不会向您显示android:clickable作为菜单项的建议之一。它只显示android:checkable

这不是一个错误。它的设计就是以这种方式工作。

您仍然可以将onClick侦听器附加到菜单项,但您需要在java代码中执行此操作。