2013-08-08 30 views
6

Tôi cố gắng để sử dụng thanh hành động của tôi và tôi đã nhận execption nàyClassCastException: 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) 

Tôi đã đọc về lỗi này và một cái gì đó của nó với đường dẫn java của tôi.

Tôi đã thử tất cả các loại solutin nhưng tôi vẫn gặp lỗi này.

Đây là java để con đường của tôi và xuất khẩu:

enter image description here

mã của tôi:

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

Trường hợp ngoại lệ là:

@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); 
     } 

tôi nhập khẩu

import android.support.v7.widget.ShareActionProvider; 

Thank vì đã giúp

+0

Bạn có thể hiển thị ảnh chụp màn hình về cấu trúc dự án của mình không? Dự án có được nhập vào nhật thực và được tham chiếu không? Tôi thấy bạn có một tham chiếu đến lọ, nhưng theo như tôi hiểu nó cũng nên được tham chiếu như là một dự án. – QVDev

+0

Tôi đã thêm tham chiếu vào dự án và nó vẫn không hoạt động – dasdasd

+0

Trên phiên bản Android nào bạn có ngoại lệ này? – mente

Trả lời

25

Thêm một không gian tên mới 'myapp' hoặc bất cứ điều gì như vậy

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

Sử dụng không gian tên đó cho SearchView và shareprovider.

xem dưới đây

Thay đổi android:actionProviderClass="android.support.v7.widget.ShareActionProvider" để myapp:actionProviderClass="android.support.v7.widget.ShareActionProvider"

android:actionViewClass="android.support.v7.widget.SearchView" để myapp:actionViewClass="android.support.v7.widget.SearchView"

Cũng thay đổi namespace cho showAsaction để myapp.

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

Hy vọng rằng sẽ giải quyết nó. Kiểm tra tài liệu ở đây thông tin đầy đủ. ActionBar Documentation

DevBytes 6 Min Intro to ActionBar on YouTube

+0

Tôi đã tìm kiếm giải pháp cho vấn đề này trong một thời gian và chỉ điều này công trinh. Đây là câu trả lời được chấp nhận – user1549672

+0

Điều này cũng làm việc cho tôi trên Xamarin khi 'MenuItemCompat' luôn trả về null. – VSG24

0

Hãy chắc chắn rằng bạn đang sử dụng SearchView - android.support.v7.widget.SearchView và không phải là thư viện v4

2

thử này từ 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

Đề xuất.

Trước hết hãy xóa tất cả các tệp library.jar hỗ trợ khỏi thư mục libs của bạn trong dự án chính của bạn. I E. android-support-v4.jar ...

Tiếp theo điều hướng đến thư mục sdk android của bạn và nhập dự án thư viện sau đây. $ SDK \ extras \ android \ support \ v7 \ appcompat.

Sau khi sửa bất kỳ lỗi nào trong dự án thư viện (có thể cần phải đặt mục tiêu xây dựng android thành phiên bản mới nhất mà bạn đã cài đặt).

Bây giờ trong dự án chính của bạn, hãy thêm dự án thư viện này, bằng cách chuyển đến các thuộc tính dự án trong nhật thực, nhấp vào android và thêm.

Sau đó, bạn có thể cần sửa các dự án nhập, làm sạch và xây dựng dự án của mình.

Các vấn đề liên quan