2013-08-08 26 views
6

staram się korzystać z paska działań i mam to execptionClassCastException: android.support.v7.widget.ShareActionProvider

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) 

Czytałem o tym błędzie i jej coś z moich ścieżkach Java.

Próbowałem wszystkich rodzajów solutynów, ale nadal mam ten błąd.

Oto moja java kolejność ścieżka i eksport:

enter image description here

Moi kody:

<?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> 

Gdzie Wyjątkiem jest:

@Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu items for use in the action bar 
      MenuInflater inflater = getMenuInflater(); 
      inflater.inflate(R.menu.add_workout_actionbar, menu); 

      MenuItem shareItem = menu.findItem(R.id.action_share); 
      mShareActionProvider = (ShareActionProvider) 
        MenuItemCompat.getActionProvider(shareItem); 
      mShareActionProvider.setShareIntent(getDefaultIntent()); 

      return super.onCreateOptionsMenu(menu); 
     } 

I importowane

import android.support.v7.widget.ShareActionProvider; 

podziękować za pomoc

+0

Czy możesz wyświetlić zrzut ekranu przedstawiający Twoją strukturę projektu? Czy projekt jest importowany do zaćmienia i odwołuje się do niego? Widzę, że masz odniesienie do słoika, ale o ile rozumiem, powinien to być również odnośnik jako projekt. – QVDev

+0

Dodałem odnośnik do projektu i nadal nie działa – dasdasd

+0

Na jakiej wersji Androida otrzymujesz ten wyjątek? – mente

Odpowiedz

25

Dodaj nową namespace 'myapp' lub cokolwiek jak tak

<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myapp="http://schemas.android.com/apk/res-auto" >

Użyj tej przestrzeni nazw dla searchview i shareprovider.

patrz niżej

Zmień android:actionProviderClass="android.support.v7.widget.ShareActionProvider" do myapp:actionProviderClass="android.support.v7.widget.ShareActionProvider"

android:actionViewClass="android.support.v7.widget.SearchView" do myapp:actionViewClass="android.support.v7.widget.SearchView"

także zmiany nazw dla showAsaction do myapp.

android:showAsAction="ifRoom|collapseActionView" do myapp:showAsAction="ifRoom|collapseActionView"

nadzieję, że rozwiązuje go. Sprawdź dokument tutaj pełne informacje. ActionBar Documentation

DevBytes 6 Min Intro to ActionBar on YouTube

+0

Szukałem rozwiązania tego problemu przez jakiś czas i tylko to Prace. To powinno być zaakceptowaną odpowiedzią. – user1549672

+0

To również zadziałało dla mnie na Xamarinie, gdy 'MenuItemCompat' zawsze zwracał wartość null. – VSG24

0

Upewnij się, że używasz Searchview - android.support.v7.widget.SearchView a nie bibliotekę v4

2

spróbować tego z developer.android.com

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"); 
    . . . 

}

1

Sugestie.

Najpierw usuń wszystkie pliki biblioteki library.jar z folderu libs w głównym projekcie. TO ZNACZY. Android-support-v4.jar ...

Następnie przejdź do katalogu sdk systemu Android i zaimportuj następujący projekt biblioteki. $ SDK \ dodatki \ android \ wsparcie \ v7 \ appcompat.

Po czym napraw błędy w projekcie bibliotecznym (może być konieczne ustawienie docelowej wersji Androida na najnowszą).

Teraz w głównym projekcie dodaj ten projekt biblioteki, przechodząc do właściwości projektu w czasie zaćmienia, klikając przycisk Android i dodaj.

Po czym konieczne może być naprawienie importu projektu, oczyszczenie i skompilowanie projektu.

Powiązane problemy