ShareActionProvider n'est pas cliquable et ne rend pas correctement le premier rendu

J'ai un ShareActionProvider avec d'autres options dans mon ActionBar. Il semble cependant que ShareActionProvider ait des problèmes de rendu correctement lors du premier rendu en mode portrait et il n'est pas possible de cliquer sur le premier rendu. Un changement d'orientation rend l'écran et toutes les options qui sont censées être visibles sont visibles et lors de la rotation du Backback ActionBar à nouveau, mais cette fois-ci, il est également rendu correctement en mode portrait.

J'ai joint une image qui décrit la situation:

  1. L'option Partager n'est pas correctement rendue, elle devrait avoir une icône à côté et si elle ne correspond pas à la mise en page, elle devrait devenir un menu à 3 points.

  2. Après l'orientation, toutes les options sont visibles comme prévu.

  3. En tournant vers le haut vers le portrait, on redresse le ActionBar et maintenant le menu à 3 points apparaît comme il se doit et il peut être cliqué.

Des idées sur ce qui se passe ici?

Description ActionBar

C'est mon XML:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/item_delete" android:icon="@android:drawable/ic_menu_delete" android:showAsAction="ifRoom|withText" android:title="Delete" android:visible="false"/> <item android:id="@+id/item_edit" android:icon="@android:drawable/ic_menu_edit" android:showAsAction="ifRoom|withText" android:title="Edit" android:visible="false"/> <item android:id="@+id/item_share" android:actionProviderClass="android.widget.ShareActionProvider" android:showAsAction="ifRoom|withText" android:title="Share" android:visible="false"/> <item android:id="@+id/item_save" android:icon="@android:drawable/ic_menu_save" android:showAsAction="ifRoom|withText" android:title="Save" android:visible="false"/> <item android:id="@+id/menu_search" android:actionViewClass="android.widget.SearchView" android:icon="@android:drawable/ic_menu_search" android:showAsAction="ifRoom" android:title="@string/menu_search" android:visible="false"/> </menu> 

Et c'est ainsi que je gère le menu des options dans un fragment:

  /** * Hook into the OptionsMenu and add an Edit, Delete and Share option. */ @Override public void onPrepareOptionsMenu(Menu menu) { MenuItem deleteItem = menu.findItem(R.id.item_delete); deleteItem.setVisible(true); MenuItem editItem = menu.findItem(R.id.item_edit); editItem.setVisible(true); MenuItem shareItem = menu.findItem(R.id.item_share); shareItem.setVisible(true); shareActionProvider = (ShareActionProvider) shareItem.getActionProvider(); shareActionProvider.setShareIntent(getShareIntent()); super.onPrepareOptionsMenu(menu); } /** * Builds an intent that takes the path for the image and passes it to * the sharing mechanism as a stream built on the URI of the image path. * @return the intent to share the image as a stream */ private Intent getShareIntent() { Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + receipt.getPhoto())); shareIntent.setType("image/jpeg"); return shareIntent; } 

  • Comment puis-je obtenir mon ShareActionProvider pour soumettre un texte Dynamic (from the listeners) view pagers etc.
  • Taille de l'occurrence de l'icône ShareAction sur ActionBar avec ShareActionProvider-v7
  • Seulement quatre options pour ShareActionProvider avec ActionBarSherlock
  • ShareActionProvider actualise le texte
  • Comment désactiver le partage d'historique lors de l'utilisation de ShareActionProvider?
  • Style de menu ShareActionProvider
  • J'utilise ShareActionProvider dans PopupMenu, mais affichez-vous deux PopupMenu?
  • Comment cacher l'icône Partager l'action (qui utilise le plus) près du fournisseur d'actions partagées?
  • 4 Solutions collect form web for “ShareActionProvider n'est pas cliquable et ne rend pas correctement le premier rendu”

    C'est parce que vous devez ajouter une intention au ShareActionPRovider juste après avoir ShareActionPRovider le menu, sur onCreateOptionsMenu .

    Si vous le faites uniquement dans onPrepareOptionsMenu , vous devrez appeler manuellement invalidateOptionsMenu() pour déclencher une mise à jour ActionBar (comme la réponse choisie l'indique). Mais ce n'est pas la façon de le faire.

    Cela fonctionne bien lorsque la configuration change, car onPrepareOptionsMenu() est appelé, et votre bouton de partage fonctionnera, puisqu'il a maintenant une intention.

    Pour résoudre ce problème, faites simplement comme suit:

     @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.YOUR_MENU_XML, menu); ShareActionProvider provider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); if (provider != null) { Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_TEXT, YOUR_TEXT); shareIntent.setType("text/plain"); provider.setShareIntent(shareIntent); } return true; } 

    De cette façon, ShareActionProvider aura une Intent dès le début et fonctionnera comme prévu.

    Il semble donc que l'appelant " getActivity (). InvalidateOptionsMenu () " dans onCreateView dans le Fragment rend le menu re-render comme il se doit. Il devrait être correctement rendu dans le premier essai, invalider le menu sans apporter de modifications à celui-ci ne se sent pas comme une solution appropriée.

    Il se cache comme un bug de plate-forme. Vous pouvez consulter ce http://code.google.com/p/android/issues/detail?id=25467 pour plus d'informations.

    Je ne pense pas que ce soit un bug. C'est parce que votre titre a changé. C'était plus court ("Détails" au lieu de "Réception de Détail") à l'origine, et donc le système devait penser qu'il y avait plus de place pour afficher plus d'éléments d'action.

    En outre, la largeur du ShareActionProvider est dynamique (peut atteindre jusqu'à 2 fois la largeur normale).

    Pour tester une chose ou deux, je vous propose de déplacer l'élément d'action de partage jusqu'à la première position, de supprimer votre solution temporaire et de voir si elle se produit encore. Vous pouvez également supprimer l'élément d'action de partage et utiliser 3 ou plus d'éléments d'action conventionnels comme test.

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