使用android.support.v7.appcompat实现弹出菜单

使用android.support.v7.appcompat实现弹出菜单,android,Android,我想在谷歌play应用程序中实现弹出菜单,下面是我的代码 PopupMenu popup = new PopupMenu(MainActivity.this, v); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem arg0) {

我想在谷歌play应用程序中实现弹出菜单,下面是我的代码

PopupMenu popup = new PopupMenu(MainActivity.this, v);
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

        @Override
        public boolean onMenuItemClick(MenuItem arg0) {

            // TODO Auto-generated method stub
            return false;
        }
    });
    popup.inflate(R.menu.menu_popup);
    popup.show();
我已将appcompat7添加到我的应用程序库文件夹中。下面是我点击按钮时的碰撞报告

01-23 12:05:59.690: E/AndroidRuntime(14728): FATAL EXCEPTION: main 
01-23 12:05:59.690: E/AndroidRuntime(14728): java.lang.IllegalStateException: Could not execute method of the activity
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.view.View$1.onClick(View.java:3607)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.view.View.performClick(View.java:4212)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.view.View$PerformClick.run(View.java:17477)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.os.Handler.handleCallback(Handler.java:800)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.os.Handler.dispatchMessage(Handler.java:100)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.os.Looper.loop(Looper.java:194)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.app.ActivityThread.main(ActivityThread.java:5371)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at java.lang.reflect.Method.invokeNative(Native Method)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at java.lang.reflect.Method.invoke(Method.java:525)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at dalvik.system.NativeStart.main(Native Method)
01-23 12:05:59.690: E/AndroidRuntime(14728): Caused by: java.lang.reflect.InvocationTargetException
01-23 12:05:59.690: E/AndroidRuntime(14728):    at java.lang.reflect.Method.invokeNative(Native Method)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at java.lang.reflect.Method.invoke(Method.java:525)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.view.View$1.onClick(View.java:3602)
01-23 12:05:59.690: E/AndroidRuntime(14728):    ... 11 more
01-23 12:05:59.690: E/AndroidRuntime(14728): Caused by: java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.support.v7.internal.view.menu.MenuPopupHelper.<clinit>(MenuPopupHelper.java:50)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at android.support.v7.widget.PopupMenu.<init>(PopupMenu.java:69)
01-23 12:05:59.690: E/AndroidRuntime(14728):    at com.vs2.popupmenuexample.MainActivity.showPopup(MainActivity.java:26)
01-23 12:05:59.690: E/AndroidRuntime(14728):    ... 14 more
01-23 12:05:59.690:E/AndroidRuntime(14728):致命异常:main
01-23 12:05:59.690:E/AndroidRuntime(14728):java.lang.IllegalStateException:无法执行活动的方法
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.view.view$1.onClick(view.java:3607)
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.view.view.performClick(view.java:4212)
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.view.view$PerformClick.run(view.java:17477)
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.os.Handler.handleCallback(Handler.java:800)上
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.os.Handler.dispatchMessage(Handler.java:100)上
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.os.Looper.loop(Looper.java:194)上
01-23 12:05:59.690:E/AndroidRuntime(14728):位于android.app.ActivityThread.main(ActivityThread.java:5371)
01-23 12:05:59.690:E/AndroidRuntime(14728):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-23 12:05:59.690:E/AndroidRuntime(14728):位于java.lang.reflect.Method.invoke(Method.java:525)
01-23 12:05:59.690:E/AndroidRuntime(14728):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
01-23 12:05:59.690:E/AndroidRuntime(14728):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
01-23 12:05:59.690:E/AndroidRuntime(14728):在dalvik.system.NativeStart.main(本机方法)
01-23 12:05:59.690:E/AndroidRuntime(14728):由以下原因引起:java.lang.reflect.InvocationTargetException
01-23 12:05:59.690:E/AndroidRuntime(14728):位于java.lang.reflect.Method.Invokenactive(本机方法)
01-23 12:05:59.690:E/AndroidRuntime(14728):位于java.lang.reflect.Method.invoke(Method.java:525)
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.view.view$1.onClick(view.java:3602)
01-23 12:05:59.690:E/AndroidRuntime(14728):。。。还有11个
01-23 12:05:59.690:E/AndroidRuntime(14728):由以下原因引起:java.lang.NoClassDefFoundError:android.support.v7.appcompat.R$layout
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.support.v7.internal.view.menu.menupopupherper.(menupopupherper.java:50)
01-23 12:05:59.690:E/AndroidRuntime(14728):在android.support.v7.widget.PopupMenu.(PopupMenu.java:69)
01-23 12:05:59.690:E/AndroidRuntime(14728):在com.vs2.popupmenuexample.MainActivity.showPopup(MainActivity.java:26)
01-23 12:05:59.690:E/AndroidRuntime(14728):。。。14多

您能否尝试以下解决方案:

基于支持库代码创建库项目:

  • 确保已使用下载的Android支持库 SDK管理器。创建一个库项目并确保所需的JAR 文件包含在项目的生成路径中:
  • 选择文件>导入
  • 在工作区中选择现有的Android代码,然后单击下一步
  • 浏览到SDK安装目录,然后浏览到support Library文件夹。例如,如果要添加appcompat项目,请浏览到/extras/android/support/v7/appcompat/
  • 单击“完成”导入项目。对于v7 appcompat项目,您现在应该看到一个名为android-support-v7-appcompat的新项目
  • 在新库项目中,展开libs/文件夹,在每个文件夹上单击鼠标右键 .jar文件,然后选择构建路径>添加到构建路径。例如 在创建v7 appcompat项目时,添加 android-support-v4.jar和android-support-v7-appcompat.jar文件 构建路径
  • 右键单击库项目文件夹并选择生成路径> 配置生成路径
  • 在Order and Export选项卡中,检查刚刚添加到的.jar文件 生成路径,因此它们可用于依赖于 这个图书馆项目。例如,appcompat项目需要您 导出android-support-v4.jar和 android-support-v7-appcompat.jar文件
  • 取消选中Android依赖项
  • 单击“确定”完成更改。现在您有了一个用于的库项目 您选择的支持库,可以与一个或多个支持库一起使用 应用项目
将库添加到应用程序项目中:

  • 在项目资源管理器中,右键单击项目并选择 财产
  • 在对话框左侧的类别面板中,选择Android
  • 在库窗格中,单击添加按钮
  • 选择库项目并单击“确定”。例如,appcompat 项目应列为android-support-v7-appcompat
  • 在“属性”窗口中,单击“确定”
资料来源: