使用android.support.v7.appcompat实现弹出菜单
我想在谷歌play应用程序中实现弹出菜单,下面是我的代码使用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) {
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
- 在“属性”窗口中,单击“确定”