Exception: Ceci n'est pas pris en charge, utilisez MenuItemCompat.getActionProvider ()

J'essaie de faire le bouton "Partager" dans la barre d'action de l'application Android. Voici mon code:

import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v7.app.ActionBarActivity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ShareActionProvider; import android.widget.TextView; 

Et partie fragment:

  • Utilisez la zone de liste déroulante du thème au-dessus de la mise en page pour choisir une disposition différente, ou réparez les références de style de thème
  • 403: la demande est comprise, mais on a refusé Twitter Android
  • Comment passer des options de ligne de commande à l'émulateur dans Android Studio?
  • Xamarin Forms MasterDetail navigation de la page provoquant un crash sur Android , fonctionne sur iOS et UWP
  • Ajouter Joda Time
  • Comment puis-je gérer la valeur nulle en utilisant la fonction JSonobject.getInt?
  •  { private String mForecastText; public PlaceholderFragment() { setHasOptionsMenu(true); } private Intent sharedIntentMaker(){ Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_TEXT, mForecastText + "#SunshineApp"); return shareIntent; } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.menu_detail, menu); MenuItem menuItem = menu.findItem(R.id.menu_action_share); ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); mShareActionProvider.setShareIntent(sharedIntentMaker()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_detail, container, false); TextView textIntent = (TextView) rootView.findViewById(R.id.textIntent); Intent intent = getActivity().getIntent(); mForecastText = intent.getStringExtra("INT_PS"); textIntent.setText(mForecastText); return rootView; } 

    Lorsque je lance mon application sur un émulateur ou même un périphérique réel, j'ai l'exception:

     AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider() 

    Et il relie les chaînes onCreateOptionsMenu ():

     ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider(); mShareActionProvider.setShareIntent(sharedIntentMaker()); 

    Qu'est-ce que je fais mal?

    PS: Stacktrace d'erreur de logcat:

    01-11 13: 03: 17.490 2331-2331 / com. *****. *****. ***** E / AndroidRuntime: EXCEPTION FATALE: processus principal: com. *****. * ****. *****, PID: 2331

     java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider() at android.support.v7.internal.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:645) at com.project.malina.sunsine.DetailActivity$PlaceholderFragment.onCreateOptionsMenu(DetailActivity.java:70) at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1868) at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1989) at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:276) at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276) at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79) at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:979) at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182) at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79) at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:115) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

  • Obtenir des données de la notification GCM
  • Mise à jour de l'application Google Play - ne peut pas publier une nouvelle application
  • Custom attr get color returns invalid values
  • Écran Préférences utilisant ActionBar Sherlock
  • De bonnes alternatives pour partager un arbre complexe d'objets entre les activités dans Android?
  • Cryptage / décryptage Android avec AES
  • 2 Solutions collect form web for “Exception: Ceci n'est pas pris en charge, utilisez MenuItemCompat.getActionProvider ()”

    Tout d'abord, vous ne pouvez pas utiliser android.widget.ShareActionProvider avec le backport de la barre d'action appcompat-v7 (par exemple, ActionBarActivity ). Utilisez la version appcompat-v7 de ShareActionProvider ou passez tout à la barre d'action native.

    Deuxièmement, si vous appcompat-v7 à appcompat-v7 , vous ne pouvez pas utiliser de manière sécurisée getActionProvider() , car cette méthode n'existera pas sur API Level 10 et ci-dessous. Remplacez menuItem.getActionProvider() par MenuItemCompat.getActionProvider(menuItem) .

    FWIW, voici un exemple de projet qui implémente l'édition appcompat-v7 de ShareActionProvider .

    Vous pouvez suivre le modèle dans l'exemple de code de Google dans le lien ci-dessous. https://github.com/googlesamples/android-ActionBarCompat-ShareActionProvider

    Le moyen le plus simple est d'aller dans votre Studio Android => Fichier, Importer un exemple. Ensuite, tapez "Share Action Provider".

    Entrez la description de l'image ici

    Voici le code impliqué dans la création de Share Action Item de menu avec ShareActionProvider avec ActionBarCompat, compatible avec l'API v7.

    MainActivity.java

     // BEGIN_INCLUDE(get_sap) @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu resource getMenuInflater().inflate(R.menu.main_menu, menu); // Retrieve the share menu item MenuItem shareItem = menu.findItem(R.id.menu_share); // Now get the ShareActionProvider from the item mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); // Get the ViewPager's current item position and set its ShareIntent. int currentViewPagerItem = ((ViewPager) findViewById(R.id.viewpager)).getCurrentItem(); setShareIntent(currentViewPagerItem); return super.onCreateOptionsMenu(menu); } // END_INCLUDE(get_sap private void setShareIntent(int position) { // BEGIN_INCLUDE(update_sap) if (mShareActionProvider != null) { // Get the currently selected item, and retrieve it's share intent ContentItem item = mItems.get(position); Intent shareIntent = item.getShareIntent(MainActivity.this); // Now update the ShareActionProvider with the new share intent mShareActionProvider.setShareIntent(shareIntent); } // END_INCLUDE(update_sap) } 

    Main_menu.xml

     <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:support="http://schemas.android.com/apk/res-auto"> <!-- To use ShareActionProvider provided by ActionBarCompat, we reference the class by set the support:actionProviderClass attribute with the full class name of ShareActionProvider. --> <item android:id="@+id/menu_share" android:title="@string/menu_share" support:actionProviderClass="android.support.v7.widget.ShareActionProvider" support:showAsAction="always" /> 

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.