【问题标题】:ClasscastException android.support.v7.widget.ShareActionProvider to action.view.ActionProvider [duplicate]ClasscastException android.support.v7.widget.ShareActionProvider 到 action.view.ActionProvider [重复]
【发布时间】:2013-10-02 05:06:08
【问题描述】:

以下是我的活动代码。

问题是我无法正确使用 AppCompat 库,它给了我

ClasscastException android.support.v7.widget.ShareActionProvider to action.View.ActionProvider

   import android.content.Intent;
   import android.os.Bundle;
   import android.support.v4.view.MenuItemCompat;
   import android.support.v7.app.ActionBarActivity;
   import android.support.v7.widget.ShareActionProvider;
   import android.view.Menu;
   import android.view.MenuItem;

    public class MainActivity extends ActionBarActivity{
android.support.v7.widget.ShareActionProvider shareAction;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    MenuItem item =(MenuItem) menu.findItem(R.id.menu_settings);
    shareAction = (ShareActionProvider) MenuItemCompat
            .getActionProvider(item);
    shareAction.setShareIntent(createShareIntent());
    return true;
}

public Intent createShareIntent() {
    Intent share = new Intent(Intent.ACTION_SEND);
    share.setAction(Intent.ACTION_SEND).putExtra(Intent.EXTRA_TEXT, "TEST")
            .setType("text/plain");
    return share;
}

}

根据 developer.android.com 上的指南,我正在正确使用该库

下面是我的菜单文件

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

<item
    android:id="@+id/menu_settings"
    android:orderInCategory="100"
    easyshare:showAsAction="ifRoom"
    easyshare:actionProviderClass="android.support.v7.widget.ShareActionProvider"
    />
  </menu>

** 已编辑的 LogCat 输出 ** 抱歉,我之前得到了标签中给出的异常,但现在看到我收到此错误并且不知何故无法找到问题

    10-02 02:17:46.566: E/AndroidRuntime(896): FATAL EXCEPTION: main
    10-02 02:17:46.566: E/AndroidRuntime(896): java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$styleable
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.java:98)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.java:58)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.java:98)
    10-02 02 :17:46.566: E/AndroidRuntime(896):     at net.mobitexter.easyshare.MainActivity.onCreate(MainActivity.java:16)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.app.Activity.performCreate(Activity.java:4465)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
    10-02 02:17:46.566: E/AndroidRuntime(896):  at android.app.ActivityThread.access$600(ActivityThread.java:127)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at android.os.Handler.dispatchMessage(Handler.java:99)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at android.os.Looper.loop(Looper.java:137)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at android.app.ActivityThread.main(ActivityThread.java:4448)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at java.lang.reflect.Method.invokeNative(Native Method)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at java.lang.reflect.Method.invoke(Method.java:511)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590)
     10-02 02:17:46.566: E/AndroidRuntime(896):     at dalvik.system.NativeStart.main(Native Method)
     10-02 02:18:02.152: I/Process(896): Sending signal. PID: 896 SIG: 9

*看看清单是否有帮助* 以下是我的清单文件的代码

 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.mobitexter.easyshare"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="net.mobitexter.easyshare.MainActivity"
        android:label="@string/app_name"
         >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

【问题讨论】:

  • @CommonsWare: android.widget.ShareActionProvider 没有被使用,是吗?我在这里只能看到android.support.v7.widget.ShareActionProvider - 所以它可能不是重复的。
  • "android.widget.ShareActionProvider 没有被使用,是吗?" - 由于 OP 声称这是错误,因此必须使用它。不幸的是,OP 没有发布完整的堆栈跟踪。
  • @CommonsWare:我同意,这是一个很好的猜测——当然。但是,我看不到任何证据。不介意... :)
  • @CommonsWare 你能帮我解决这个问题吗?因为我没有解决这个问题
  • 嘿,在这里试试 developer.android.com/reference/android/support/v7/widget/… 这是来自谷歌的标准示例,用于 v7 actioncompat。

标签: android shareactionprovider


【解决方案1】:

你需要像这样替换 ShareActionProvider 的演员表

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
MenuItem item =(MenuItem) menu.findItem(R.id.menu_settings);
shareAction = (android.support.v7.widget.ShareActionProvider) item.getActionProvider();
shareAction.setShareIntent(createShareIntent());
return true;
}

它应该可以正常工作。请测试它并告诉我它是否正常工作。

【讨论】:

  • 不,它没有。同样的错误
  • 我已经编辑了我的代码,你可以看到差异并尝试一下。
  • @Saklos- 它不会工作。从 ActionProvider 到 ShareActionProvider 有一个转换异常。此外,item.getActionProvider 在 API 14 及更高版本中工作。API 14 及更高版本不是问题是要支持 Android 2.1 及更高版本
  • 感谢您提供的信息,所以在这种情况下您不能使用 SharlockAction 栏,它会帮助您actionbarsherlock.com
  • 其实我不能用,因为这段代码是大东西的一部分,所以我不能使用 ActionbarSherlock(大东西不使用 Sherlock)
猜你喜欢
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2018-08-15
  • 1970-01-01
相关资源
最近更新 更多