Android Pouvez pas utiliser le menu déroulant dans le Fragment
Je suis nouveau sur android. Maintenant, je suis en train de créer une barre de défilement. Maintenant, j'ai créé une barre de défilement. Maintenant, je veux montrer popup lorsque je clique sur l'icône dans la barre d'Action.
Quand j'ai des extensions d'activité de la popup fonctionne bien. Mais quand j'ai changer les extensions Fragment je ne peux pas utiliser la fenêtre contextuelle. S'il vous plaît laissez-moi savoir toute idée ou un exemple de menu déroulant dans le Fragment de page.
public void popup_window() {
View menuItemView = findViewById(R.id.menu_popup);
PopupMenu popupMenu = new PopupMenu(this, menuItemView);
popupMenu.getMenuInflater().inflate(R.menu.list_, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_ticket:
Intent intdn = new Intent(List_Activity.this,List_Activity.class);
intdn.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intdn);
break;
case R.id.action_survey:
Toast.makeText(getApplicationContext(),"Under Construction ",Toast.LENGTH_LONG).show();
break;
case R.id.action_service_request:
Toast.makeText(getApplicationContext(),"Under Construction ",Toast.LENGTH_LONG).show();
break;
default:
break;
}
return true;
}
});
popupMenu.show();
}
J'obtiens l'erreur:-
Beaucoup d'erreur. Merci de m'aider à résoudre ce problème. Merci à l'avance.
LogCat Message D'Erreur:-
FATAL EXCEPTION: main
java.lang.IllegalStateException: MenuPopupHelper cannot be used without an anchor
at com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:101)
at android.widget.PopupMenu.show(PopupMenu.java:108)
at com.example.sample.Testing_Fragment1.popup_window(Testing_Fragment1.java:262)
at com.example.sample.Testing_Fragment1.onOptionsItemSelected(Testing_Fragment1.java:227)
at android.app.Fragment.performOptionsItemSelected(Fragment.java:1801)
at android.app.FragmentManagerImpl.dispatchOptionsItemSelected(FragmentManager.java:1959)
at android.app.Activity.onMenuItemSelected(Activity.java:2551)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.ActionMenuView.invokeItem(ActionMenuView.java:547)
at com.android.internal.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:115)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
Pour le menu contextuel d'activité requis contexte afin de Remplacer tous les contextes avec getActivity() dans le fragment.
OriginalL'auteur Vijay | 2014-05-08
Vous devez vous connecter pour publier un commentaire.
vous pouvez appeler
findViewById()
directement pourActivity
, cependant que vous êtes à l'aide d'unFragment
, youo aurez besoin d'un objet d'affichage pour appelerfindViewById()
.par exemple. getView().findViewById();
Vue - findViewById()
L'activité findViewById()
getView() --Ce sera le retour de la vue racine pour le fragment, avec cela, vous pouvez appeler
findViewById()
Ici menu contextuel nécessite
Context
, passé en premier paramètre. Vous pouvez utiliserthis
si vous êtes en activité, cependant dans la Fragment que vous devez utilisergetActivity()
au lieu dethis
PopupMenu(contexte Contexte, en Vue d'ancrage)
c'est faux, en Fait, il devrait être forfait contexte et la classe
packageContext
--- Contexte de l'ensemble de la demande la mise en œuvre de cette classe.class
--- La classe de composant qui est utilisé pour l'intention.Utilisation
getActivity().getApplicationContext()
au lieu de simplementgetApplicationContext()
chaque fois que vous souhaitez afficherToast
deFragment
De sorte que votre code ressemblera à
Mise à JOUR:
Vous obtenez cette exception, car la vue d'Ancrage pour ce popup est nul, je suppose. Donc à chaque fois que le système tente de montrer la popup, il vous donne cette exception.
Il suffit de cocher la
tryShow()
dansMenuPopupHelper
Également se référer à ce post sur par Maxim Zaslavsky
Fermée de Force Lorsque je clique sur l'icône.
pourriez-vous svp poster le stacktrace?
Salut @Ritesh Gune.. j'ai ajouter le LogCat message d'Erreur dans mon post original.
popupMenu.setOnMenuItemClickListener(nouveau PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { Ici seulement j'obtiens l'erreur.
OriginalL'auteur Ritesh Gune
vous pouvez utiliser à la place de ceci : getcontexteapplication()
utiliser ceci : My_Activity.cette
OriginalL'auteur Ersin Gülbahar
utilisation
getActivity().getApplicationContext()
à l'intérieur de fragment.utilisation PopupMenu popupMenu = new PopupMenu(getActivity(), menuItemView);
Maintenant, tous l'erreur effacée. Mais l'Application de l'obtention de la force de fermeture lorsque je clique sur l'icône.
OriginalL'auteur Mohd Mufiz
Problème est pop-up ou les boîtes de dialogue sont associés à une 'Activité' , vous avez besoin du contexte d'Activité ici. Mais il s'agit de votre 'Fragment'.
Est une façon de passer le
Activity
contexte lorsque vous créez l'instance de Fragment ou utiliser legetActivity
méthode de laFragment
qui sera de retour le contexte d'activité.Afin de modifier votre code comme ceci
Salut @Libin.. popupMenu.setOnMenuItemClickListener(nouveau PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { j'obtiens l'erreur ici.
si votre utilisation d'un support de android.de soutien.v7.widget de.PopupMenu assurez-vous android:thème="@style/Thème.AppCompat" . Laissez-moi savoir
OriginalL'auteur Libin
Essayez ceci:
OriginalL'auteur ZG-RG