IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

StackOverflow avec OnItemLongClick et ContextMenu


Sujet :

Android

  1. #1
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut StackOverflow avec OnItemLongClick et ContextMenu


    J'ai un problème dans mon application. J'ai une ListView et j'amerais que lorsque l'on faitun click long sur un item un menu contextuel s'ouvre.
    J'ai donc suivi ce tuto : Tuto ContextMenu
    Mais j'obtiens une magnifique boucle infinie dans la méthode onItemLongClick et donc une erreur java.lang.StackOverflow
    Je n'arrive pas à comprendre d'où vient cette erreur

    Voici le code de mon activity

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
        private ArrayList<File> onBuildingHuntsList;
     
        private AdapterView.OnItemLongClickListener onItemLongClickListener = new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                registerForContextMenu(view);
                view.showContextMenu();  //La ligne 42 citée dans le message d'erreur
                return true;
            }
        };
     
     
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
            super.onCreateContextMenu(menu, v, menuInfo);
            getMenuInflater().inflate(R.menu.edit_item_menu, menu);
        }
     
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch (item.getItemId()){
                case R.id.edit_item :
                    //TODO edit item
                    return true;
                case R.id.delete_item:
                    //TODO delete item
                    return true;
            }
            return false;
        }
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_on_building_hunt);
     
            //...
     
                   onBuildingHuntsList = huntDirectoryReader.getHuntFileList();
            ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1);
            adapter.addAll(onBuildingHuntsList);
            adapter.notifyDataSetChanged();
            ListView listView = (ListView) findViewById(R.id.on_building_hunt_list);
            listView.setAdapter(adapter);
            listView.setOnItemLongClickListener(onItemLongClickListener);
        }
    et le message d'erreur :

    E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.chiaraercolani.treasurehunt, PID: 20811
    java.lang.StackOverflowError: stack size 8MB
    at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:3160)
    at android.view.View.showContextMenu(View.java:4929)
    at android.app.Activity.openContextMenu(Activity.java:3226)
    at com.example.chiaraercolani.treasurehunt.OnBuildingHuntActivity$1.onItemLongClick(OnBuildingHuntActivity.java:42)
    at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:3166)
    at android.view.View.showContextMenu(View.java:4929)
    at android.app.Activity.openContextMenu(Activity.java:3226)
    at com.example.chiaraercolani.treasurehunt.OnBuildingHuntActivity$1.onItemLongClick(OnBuildingHuntActivity.java:42)
    at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:3166)
    ...

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Bon j'ai pseudo-compris mais résolu.

    En bref, quand on enregistre la listview au ContextMenu (registerForContextMenu(listView);)
    Cela fait que le contextMenu se crée et s'ouvre lorsd'un longClick sur un Item.
    Et comme je définissait un listener sur longClick qui ouvrait le contextMenu, il y avait doublon => Bug

    Je sais pas si c'est très clair ni si j'ai bien tout compris mais j'ai plus de problème.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. plugin jstree avec contextmenu
    Par SPACHFR dans le forum jQuery
    Réponses: 2
    Dernier message: 10/10/2010, 12h40
  2. Problème de style avec un ContextMenu
    Par choas dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 24/10/2008, 14h19
  3. ContextMenu avec ItemsSource et clic-GAUCHE
    Par Thrud dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 19/06/2008, 13h58
  4. Petit soucis avec Rich:contextMenu
    Par monstor dans le forum JSF
    Réponses: 4
    Dernier message: 04/06/2008, 14h46
  5. Réponses: 1
    Dernier message: 28/01/2008, 14h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo