【问题标题】:Couldn't resolve menu item onClick handler无法解析菜单项 onClick 处理程序
【发布时间】:2013-11-18 23:41:08
【问题描述】:

我卡住了,只是筋疲力尽,我在这里做错了什么,我需要做什么才能让它正常工作?谢谢

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

【问题讨论】:

    标签: android eclipse


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您似乎已经解决了它,但这是困扰我的问题,并且绝对是您希望在实际文档中阅读答案的问题。 (只是为了确保您提出的任何修复程序都适用于所有手机 - 而不仅仅是您自己的......)

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

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

      请注意,这与按钮不同

      http://developer.android.com/reference/android/widget/Button.html http://developer.android.com/reference/android/R.attr.html#onClick

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

      【讨论】:

        【解决方案3】:

        我不相信menuItemonClick()。使用onOptionsItemSelected instead. Use themenuItemid` 知道点击了哪个项目。

        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,但它也讨论了ContextMenus

        【讨论】:

        • menuItem 确实有一个 onClick()
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          android:onClick

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

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

          在 API 级别 11 中引入。

          【讨论】:

            猜你喜欢
            • 2012-06-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-17
            • 2011-09-06
            • 2018-07-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多