當前位置:
首頁 >
Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理
發布時間:2025/5/22
35
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2019獨角獸企業重金招聘Python工程師標準>>>
今天在學習在ActionBar上添加分享功能時,按照文檔的寫法,報了一個錯誤Exception: This is not supported, use MenuItemCompat.getActionProvider()
下面是我抄來的代碼:
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;} }如果這樣直接運行起來,會報錯,報錯內容如下:
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();
在這里取這個ShareActionProvider出現問題。
這里要注意的幾個地方:
- 在memu配置文件里,android:actionProviderClass="android.widget.ShareActionProvider"使用的不是support的類
- 在MainActivity中,class MainActivity extends AppCompatActivity使用的是v7中的AppCompatActivity
- 在MainActivity中,mShareActionProvider成員變量是android.widget.ShareActionProvider
問題有兩個
修改后的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;} }轉載于:https://my.oschina.net/neumeng/blog/744018
總結
以上是生活随笔為你收集整理的Exception: This is not supported, use MenuItemCompat.getActionProvider()的处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第五章 系統調用
- 下一篇: nginx安装并支持upstream和t