ClassCastException:android.support.v7.widget.ShareActionProvider

ClassCastException:android.support.v7.widget.ShareActionProvider,android,android-actionbar,Android,Android Actionbar,我试着使用我的动作栏,我得到了这个选项 08-08 00:54:08.913: E/AndroidRuntime(18468): FATAL EXCEPTION: main 08-08 00:54:08.913: E/AndroidRuntime(18468): java.lang.ClassCastException: android.support.v7.widget.ShareActionProvider cannot be cast to android.view.ActionPr

我试着使用我的动作栏,我得到了这个选项

   08-08 00:54:08.913: E/AndroidRuntime(18468): FATAL EXCEPTION: main
08-08 00:54:08.913: E/AndroidRuntime(18468): java.lang.ClassCastException: android.support.v7.widget.ShareActionProvider cannot be cast to android.view.ActionProvider
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.MenuInflater$MenuState.readItem(MenuInflater.java:374)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.MenuInflater.parseMenu(MenuInflater.java:160)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.MenuInflater.inflate(MenuInflater.java:110)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.example.workoutlog.AddWorkOutPage.onCreateOptionsMenu(AddWorkOutPage.java:3190)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.app.Activity.onCreatePanelMenu(Activity.java:2490)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:460)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.android.internal.policy.impl.PhoneWindow.doInvalidatePanelMenu(PhoneWindow.java:822)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.android.internal.policy.impl.PhoneWindow$1.run(PhoneWindow.java:253)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.Choreographer.doCallbacks(Choreographer.java:562)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.Choreographer.doFrame(Choreographer.java:531)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.os.Handler.handleCallback(Handler.java:725)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.os.Handler.dispatchMessage(Handler.java:92)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.os.Looper.loop(Looper.java:137)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at android.app.ActivityThread.main(ActivityThread.java:5226)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at java.lang.reflect.Method.invokeNative(Native Method)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at java.lang.reflect.Method.invoke(Method.java:511)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-08 00:54:08.913: E/AndroidRuntime(18468):    at dalvik.system.NativeStart.main(Native Method)
我已经读到了关于这个错误以及我的java路径

我尝试了各种各样的解决方案,但还是出现了这个错误

以下是我的java路径顺序和导出:

我的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:id="@+id/save_wotkout_ab"
    android:title="Add Item"
    android:icon="@android:drawable/ic_menu_save"
    android:showAsAction="ifRoom"/> 

<item android:id="@+id/delete_workout_ab"
    android:title="Add Item"
    android:icon="@android:drawable/ic_delete"
    android:showAsAction="ifRoom"/> 

<item android:id="@+id/search_ab"
    android:title="Add Item"
    android:icon="@android:drawable/ic_menu_search"
    android:actionViewClass="android.support.v7.widget.SearchView"
    android:showAsAction="ifRoom|collapseActionView"/> 

    <item
    android:id="@+id/action_share"
    android:actionProviderClass="android.support.v7.widget.ShareActionProvider"
    android:showAsAction="ifRoom"
    android:title="share"/>

</menu>
我进口的

import android.support.v7.widget.ShareActionProvider;

感谢您帮助

添加新的名称空间“myapp”或类似的名称空间

将该命名空间用于searchview和shareprovider

见下文

更改android:actionProviderClass=“android.support.v7.widget.ShareActionProvider” 至myapp:actionProviderClass=“android.support.v7.widget.ShareActionProvider”

android:actionViewClass=“android.support.v7.widget.SearchView”
to
myapp:actionViewClass=“android.support.v7.widget.SearchView”

同时将showAsaction的命名空间更改为myapp

android:showAsAction=“ifRoom | collapseActionView”
to
myapp:showAsAction=“ifRoom | collapseActionView”

希望能解决这个问题。 检查这里的文件完整信息。


请确保您正在使用Searchview-android.support.v7.widget.Searchview 而不是v4库

}建议

首先从主项目的libs文件夹中删除所有supportlibrary.jar文件。即android-support-v4.jar

接下来导航到android sdk目录,并导入以下库项目$SDK\extras\android\support\v7\appcompat

之后,修复库项目上的任何错误(可能需要将android build target设置为您已安装的最新版本)

现在在您的主项目中添加这个库项目,方法是转到eclipse中的项目属性,单击android,然后添加


之后,您可能需要修复项目导入、清理和构建项目。

能否显示项目结构的屏幕截图?是否将项目导入eclipse并引用?我看到你提到了这个罐子,但据我所知,它也应该作为一个项目的参考。我添加了项目的参考,但它仍然不工作。在什么Android版本上,你会得到这个例外?在添加项目后,你仍然有相同的错误?类似于我一直在寻找解决这个问题的方法一段时间,只有这个工作。这应该是公认的答案当
MenuItemCompat
总是返回null时,这对我在Xamarin上也起到了作用。
import android.support.v7.widget.ShareActionProvider;
 public boolean onCreateOptionsMenu(Menu menu) {
  // Get the menu item.
  MenuItem menuItem = menu.findItem(R.id.my_menu_item);
  // Get the provider and hold onto it to set/change the share intent.
  mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
  // Set history different from the default before getting the action
  // view since a call to MenuItemCompat.getActionView() calls
  // onCreateActionView() which uses the backing file name. Omit this
  // line if using the default share history file is desired.
  mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");
  . . .