Exception: Il n'est pas pris en charge, utilisez MenuItemCompat.getActionProvider()
Je suis en train de faire un 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 le fragment de la partie:
{
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;
}
Quand je lance mon application sur l'émulateur ou même périphérique réel, je reçois exception:
AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()
et des liens vers onCreateOptionsMenu()'s cordes:
ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
mShareActionProvider.setShareIntent(sharedIntentMaker());
Ce que je fais mal?
P. S.: Stacktrace de l'erreur de logcat:
01-11 13:03:17.490 2331-2331/com.*****.*****.***** E/AndroidRuntime﹕ EXCEPTION FATALE: principal
Processus: 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)
- Veuillez inclure le stacktrace de l'erreur.
- classroom.udacity.com/courses/ud853/lessons/1474559101/concepts/... Vérifiez le bas de cette page "Diff pour cette note" de la section. Concrètement, il est dit d'utiliser "android.de soutien.v7.widget de.ShareActionProvider"
InformationsquelleAutor micsha123 | 2015-01-11
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous ne pouvez pas utiliser
android.widget.ShareActionProvider
avec leappcompat-v7
barre d'action backport (par exemple,ActionBarActivity
). Soit utiliser leappcompat-v7
version deShareActionProvider
, ou de déplacer tout sur la native de la barre d'action.Deuxièmement, si vous vous en tenez à
appcompat-v7
, vous ne pouvez pas l'utiliser en toute sécuritégetActionProvider()
, car cette méthode n'existe pas sur l'API de Niveau 10 et ci-dessous. RemplacermenuItem.getActionProvider()
avecMenuItemCompat.getActionProvider(menuItem)
.FWIW, voici un exemple de projet qui implémente l'
appcompat-v7
édition deShareActionProvider
.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
La façon la plus simple est d'aller à votre Android Studio => Fichier, Importer de l'Échantillon. Ensuite, tapez "Action de Partage Fournisseur".
Ci-dessous sont le code impliqués dans la création du Partage Action de l'Élément de Menu avec ShareActionProvider avec ActionBarCompat, rétro-compatible avec les API v7.
MainActivity.java
main_menu.xml
Suivre les étapes suivantes:
Étape.1) Pour ajouter une "action" action de votre activité, de mettre un
ShareActionProvider
dans la barre de menu de la ressource. Comme ceVeuillez noter que le
actionProviderClass
Étape.2) Maintenant, vous assurez-vous que dans votre Activité en Classe Java vous importez même
ShareActionProvider
Étape.3)
La section ci-dessous pour
onCreate
methondIntention méthode