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:

  • J'essaie de rechercher des endroits proches tels que des banques, des restaurants, des guichets automatiques dans la zone dessinée sur google maps dans Android
  • Rénover le fichier 2 vers le bas / télécharger
  • Détection de la position du pouce dans SeekBar avant l'API version 16
  • Comment puis-je supprimer les suggestions dans EditText?
  • Pourquoi mon menu Copier / Coller EditText est-il sous EditText? Comment modifier l'ordre z de la fenêtre contextuelle?
  • Changement de couleur de fond dans BottomNavigationView
  •  { 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) 

  • Maven refuse de télécharger aar conditionnement conditionné à partir d'un dépôt distant
  • Différence entre Click & Touch Listeners en Android
  • Comment obtenir l'orientation du texte dans Android et modifier la configuration dynamiquement selon la direction?
  • Cursor.getType () pour le niveau API <11
  • Comment faire pivoter un acteur d'image dans libgdx par le point central?
  • Run-as says 'package is unknown' après la mise à niveau Android vers 4.3
  • 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.