无法解析onClick处理程序中的菜单项

时间:2013-11-18 23:41:09

标签: 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:showAsAction="ifRoom" />

在mainActivity中,我添加了一种方法来在另一个Activity中激活相机的意图。

/**
 * Method to handle launching the Camera view activity.
 * @param view
 */
public void showCamera(View view) {

}

但是我收到了这个错误:

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

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

似乎你已经解决了它,但这是困扰我的事情,绝对是你想在实际文档中阅读答案的东西。 (只是为了确保你提出的任何解决方案适用于所有手机 - 而不仅仅是你自己......)

请看这里:https://developer.android.com/guide/topics/resources/menu-resource#item-element

菜单中项目的android:onClick属性需要使用 MenuItem 作为参数的公共方法。

请注意,这与

答案 2 :(得分:0)

我不相信menuItemonClick()。使用onOptionsItemSelected instead. Use the menuItem id`来了解点击了哪个项目。

Menu Docs

@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;

Handling click events

这适用于OptionsMenu,但也会讨论ContextMenu s

答案 3 :(得分:0)

不要使用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);
}

答案 4 :(得分:0)

根据Android文档-https://developer.android.com/guide/topics/resources/menu-resource#item-element

  

android:onClick

     

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

     

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

     

在API级别11中引入。