因此,更具体地说,如果我使用视图项(例如按钮),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的主要错误吗?
答案 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代码中执行此操作。