Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理
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è)
修改后的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)題。
- 上一篇: 第五章 系統調用
- 下一篇: nginx安装并支持upstream和t