日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理

發(fā)布時(shí)間:2025/5/22 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>

今天在學(xué)習(xí)在ActionBar上添加分享功能時(shí),按照文檔的寫(xiě)法,報(bào)了一個(gè)錯(cuò)誤Exception: This is not supported, use MenuItemCompat.getActionProvider()

下面是我抄來(lái)的代碼:

menu_main.xml:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/menu_item_share"android:actionProviderClass="android.widget.ShareActionProvider"android:title="Share"app:showAsAction="ifRoom" /> </menu>

MainActivity.java:

package com.neumeng.actionbarsharedemo;import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.ShareActionProvider;public class MainActivity extends AppCompatActivity {private ShareActionProvider mShareActionProvider;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate menu resource file.getMenuInflater().inflate(R.menu.menu_main, menu);// Locate MenuItem with ShareActionProviderMenuItem item = menu.findItem(R.id.menu_item_share);// Fetch and store ShareActionProvidermShareActionProvider = (ShareActionProvider) item.getActionProvider();// Return true to display menureturn true;} }

如果這樣直接運(yùn)行起來(lái),會(huì)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容如下:

java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()at android.support.v7.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:644)at com.neumeng.actionbarsharedemo.MainActivity.onCreateOptionsMenu(MainActivity.java:25)at android.app.Activity.onCreatePanelMenu(Activity.java:2846)at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:360)at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:88)at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:328)at android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java:1353)at android.support.v7.app.AppCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1633)at android.support.v7.app.AppCompatDelegateImplV9.access$100(AppCompatDelegateImplV9.java:93)at android.support.v7.app.AppCompatDelegateImplV9$1.run(AppCompatDelegateImplV9.java:132)at android.os.Handler.handleCallback(Handler.java:739)at android.os.Handler.dispatchMessage(Handler.java:95)at android.os.Looper.loop(Looper.java:148)at android.app.ActivityThread.main(ActivityThread.java:5417)at java.lang.reflect.Method.invoke(Native Method)at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

MainActivity中的第25行是:mShareActionProvider = (ShareActionProvider) item.getActionProvider();

在這里取這個(gè)ShareActionProvider出現(xiàn)問(wèn)題。

這里要注意的幾個(gè)地方:

  • 在memu配置文件里,android:actionProviderClass="android.widget.ShareActionProvider"使用的不是support的類(lèi)
  • 在MainActivity中,class MainActivity extends AppCompatActivity使用的是v7中的AppCompatActivity
  • 在MainActivity中,mShareActionProvider成員變量是android.widget.ShareActionProvider

問(wèn)題有兩個(gè)

  • 使用v7包中的ActionBar,就要使用v7包中的ShareActionProvider,或者都使用原生的ActionBar,兩者要一致
  • 如果使用v7包中的ActioBar,就不能使用item.getActionProvider()。因?yàn)檫@個(gè)方法在API Level 10及之前是不安全的。需要使用MenuItemCompat.getActionProvider(item)
  • 修改后的menu_main.xml:

    <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/menu_item_share"android:title="Share"app:actionProviderClass="android.support.v7.widget.ShareActionProvider"app:showAsAction="ifRoom" /></menu>

    修改后的MainActivity.java:

    package com.neumeng.actionbarsharedemo;import android.support.v4.view.MenuItemCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.support.v7.widget.ShareActionProvider;public class MainActivity extends AppCompatActivity {private ShareActionProvider mShareActionProvider;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate menu resource file.getMenuInflater().inflate(R.menu.menu_main, menu);// Locate MenuItem with ShareActionProviderMenuItem item = menu.findItem(R.id.menu_item_share);// Fetch and store ShareActionProvidermShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);// Return true to display menureturn true;} }

    轉(zhuǎn)載于:https://my.oschina.net/neumeng/blog/744018

    總結(jié)

    以上是生活随笔為你收集整理的Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。