Android 不能';t解析菜单项onClick处理程序

Android 不能';t解析菜单项onClick处理程序,android,eclipse,Android,Eclipse,我陷入困境,精疲力竭,我做错了什么?我需要做什么才能让它正常工作?谢谢 API 11 我在menu.xml中设置了一个项目: <item android:id="@+id/action_add_shindig" **android:onClick="showCamera"** android:icon="@drawable/shindig_new" android:title="@string/shindig_new" android:sho

我陷入困境,精疲力竭,我做错了什么?我需要做什么才能让它正常工作?谢谢

API 11

我在menu.xml中设置了一个项目:

<item android:id="@+id/action_add_shindig"
      **android:onClick="showCamera"**
      android:icon="@drawable/shindig_new"
      android:title="@string/shindig_new"
      android:showAsAction="ifRoom" />
但我得到了这个错误:


无法解析com.shindigy.shindigy.MainActivity类中的菜单项onClick处理程序showCamera

我不相信
menuItem
具有
onClick()
。改为使用选项ItemSelected。使用menuItem
id`了解单击了哪个项目


这是一个
选项菜单
,但它也讨论了
上下文菜单
s

我通过将方法更改为onCameraClick(菜单项)并更新onClick以反映其名称“onCameraClick”来解决它。

看起来您已经解决了它,但这是困扰我的一件事,你肯定想在实际文档中阅读答案。(只是为了确保你提出的任何修复方案都适用于所有手机,而不仅仅是你自己的…)

看这里:

菜单中项的android:onClick属性需要一个公共方法,参数为MenuItem

请注意,这与按钮不同


这里需要一个以视图为参数的方法。

不要使用OnClick方法

在下面的方法中使用if语句:

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    else if (id==R.id.action_other)
    {
        Toast toast=Toast.makeText(this, "Other Clicked.", Toast.LENGTH_LONG);
        toast.show();
    }
    else if (id==R.id.action_Exit)
    {
        finish();
    }
    return super.onOptionsItemSelected(item);
}

根据安卓文件-

安卓:onClick

方法名。打开此菜单项时要调用的方法 点击。该方法必须在活动中声明为public和 接受MenuItem作为其唯一参数,该参数指示该项 点击。此方法优先于要调用的标准回调 onOptionsItemSelected()。请参见底部的示例

警告:如果 如果使用ProGuard(或类似工具)混淆代码,请确保 从重命名中排除在此属性中指定的方法, 因为它会破坏功能

在API级别11中引入


menuItem确实有一个onClick()
@Override
public boolean onOptionsItemSelected(MenuItem item) {
 // Handle item selection
switch (item.getItemId()) {
    case R.id.action_add_shindig:
        // run your showCamera code or call that method
        return true;
@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    else if (id==R.id.action_other)
    {
        Toast toast=Toast.makeText(this, "Other Clicked.", Toast.LENGTH_LONG);
        toast.show();
    }
    else if (id==R.id.action_Exit)
    {
        finish();
    }
    return super.onOptionsItemSelected(item);
}