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

Composants graphiques Android Discussion :

Context menu et listview impossible de récupérer la position de l'item de la listView cliqué


Sujet :

Composants graphiques Android

  1. #21
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Je crois que dans l'exemple il ne passe pas par une ListActivity, essaye de faire de même pour voir si cela change quelque chose, je suis à court d'idée .

    En tout cas ton context a bien l'air de s'afficher et de réagir à un élément cliqué , plus qu'à savoir pourquoi les infos du menus ne se remplissent pas...

    Il y a juste une erreur sur son code , il se trompe d'id lors de la création de sa ListView.

    Si tu n'arrive toujours pas à avoir de menu info valable alors peut être que le coup de de récupérer l'élément sélectionné dans ta listview peut être une bonne idée dans le onContextItemSelected().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listView.getSelectedItemPosition()
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listview.getSelectedItemId();
    http://developer.android.com/referen...ItemPosition()

    C'est pas super propre mais ca devrait passer .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Ce problème est-il du au fait que ma list est crée dans une autre classe que mon activity principale, alors que dans les tuto et exemple que je test la list est créer dans l'activity?

    Voici comment je récupére ma list :
    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
    public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); 
            list = (ListView)findViewById(R.id.listalarme); 
            Showlistview();        
     
            for (int j=0;j<=listP.size();j++){
            	varack[j] = 0;
            }
     
            list.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
                @Override
            	public void onCreateContextMenu(ContextMenu menu_item, View v,ContextMenuInfo menuInfo) {
            		menu_item.setHeaderTitle("ContextMenu"); 
                    MenuInflater inflater = getMenuInflater();
                    inflater.inflate(R.menu.menu_itemlist, menu_item);           
            		}       	
                });
        }
     
    	private void Showlistview() {
            listP = ListAlarme.getAListOfAlarms();        
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP,AlarmeAdapter.NO_ACKKED);
            adapter.addListener(this); 
            list.setAdapter(adapter);
            registerForContextMenu(list);        
        }
    et voici la classe ou je crée ma liste :
    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
    public class ListAlarme {
    	public final static int defaut = 1;
    	public final static int grave = 2;
     
    	public String idAlarme;
    	public String typeAlarme;
    	public String grpAlarme;
    	public int genre;
     
    	public ListAlarme(String aid, String atype, String agroupe, int aGenre) {
    		idAlarme = aid;
    		typeAlarme = atype;
    		genre = aGenre;
    		grpAlarme = agroupe;
     
    	}
     
    	public static ArrayList<ListAlarme> getAListOfAlarms() {
    		ArrayList<ListAlarme> listAl = new ArrayList<ListAlarme>();
     
    		listAl.add(new ListAlarme("alarme1 ", "type1 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme2 ", "type2 ","ESD", grave));
    		listAl.add(new ListAlarme("alarme3 ", "type3 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme4 ", "type4 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme5 ", "type5 ","ESD", defaut));
    		listAl.add(new ListAlarme("alarme6 ", "type6 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme7 ", "type7 ","SMS", defaut));
    		listAl.add(new ListAlarme("alarme8 ", "type8 ","MAS", grave));
    		listAl.add(new ListAlarme("alarme9 ", "type9 ","ESD", grave));
    		listAl.add(new ListAlarme("alarme10", "type10","SMS", defaut));
    		listAl.add(new ListAlarme("alarme11", "type11","ESD", grave));
    		listAl.add(new ListAlarme("alarme12", "type12","SMS", grave));
    		listAl.add(new ListAlarme("alarme13", "type13","MAS", defaut));
    		listAl.add(new ListAlarme("alarme14", "type14","SMS", grave));
     
    		return listAl;
    	}
     
    	public String toString() {
    	     return "id : "+idAlarme+", type : "+typeAlarme+", genre : "+genre+".";
    	}	
    }
    Je ne vois pas pourquoi dans un cas je récupére bien la position et pas dans l'autre :s

  3. #23
    Invité
    Invité(e)
    Par défaut
    J'écrivais mon nouveau post pendant que tu me répondais feanorin, j'ai testé les deux solutions que tu propose, cette fois pas de Force close mais pour la position ça me renvoie toujours la même position qui n'a d'ailleurs aucune logique : -1. et l'id est toujours le même aussi :s

    ---EDIT---

    Moi non plus je ne passe pas par une ListActivity ...

  4. #24
    Invité
    Invité(e)
    Par défaut
    Je pense avoir trouver l'origine du problème, mais pas sa solution ...

    Il se trouve que mon activity implements AlarmeAdapterListener et j'ai une classe adapter qui extends BaseAdapter, dans laquelle je gére le onClick et OnLongClick sur mes item.

    J'ai enlevé ces click et changé mon code comme ci-dessous dans le oncreate de mon activity principale :
    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
     public void onCreate(Bundle savedInstanceState) 
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main); 
            list = (ListView)findViewById(R.id.listalarme);
            Showlistview(); 
            AlarmeAdapter adapter = new AlarmeAdapter(this, listP,AlarmeAdapter.NO_ACKKED);
            adapter.addListener(this); 
            list.setAdapter(adapter);
            for (int j=0;j<=listP.size();j++){
            	varack[j] = 0;
            }
     
            list.setOnCreateContextMenuListener(new OnCreateContextMenuListener(){
                @Override
            	public void onCreateContextMenu(ContextMenu menu_item, View v,ContextMenuInfo menuInfo) {
            		menu_item.setHeaderTitle("ContextMenu"); 
                    MenuInflater inflater = getMenuInflater();
                    inflater.inflate(R.menu.menu_itemlist, menu_item);           
            		}       	
                });
     
        }
     
    	private void Showlistview() {
            listP = ListAlarme.getAListOfAlarms(); 
            registerForContextMenu(list);   
            list.setOnItemClickListener(new OnItemClickListener(){        	
            	@Override
    			public void onItemClick(AdapterView<?> arg0, View v, int position,
    					long arg3) {
    				lancementDetailAlarm(position);	
            		}
    			});
        }
    et là aucun des 2 clic n'ai géré par l'application.

    Mon code de départ pour gérer les clic était :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    @Override
    	public boolean OnLongClick(ListAlarme item, int position) 
    	{
    		openContextMenu((ListView)findViewById(R.id.listalarme));
    		//lancementDetailAlarm(position);
    	    return false;
    	}
    	public void OnClick(ListAlarme item, int position) 
    	{
    		lancementDetailAlarm(position);
    	}
    L'erreur peut-elle venir de là?

  5. #25
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Je pense que le mieux serait que tu recommences ton code petit à petit en le testant , et en regardant ce qui peut interférer avec ton Context.

    Dans le OnLongClick tu retournes false donc tu ne gardes par l'évènements pour toi. Ca c'est bon , par contre dans cette procédure tu appelles openContextMenu , c'est peut être cela qui pose problème.

    Enfin ca reste des suppositions...
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  6. #26
    Invité
    Invité(e)
    Par défaut
    Je pense aussi qu'il ne me reste plus qu'a recommencer étape par étape pour trouver le problème.

    Concernant le OpenContextMenu si je ne le met pas je n'affiche pas le menu :s

    Je pense que trouver le problème et le résoudre va me prendre un peu de temps ... mais bon si je veux réussir il faut bien passer par ça =)

Discussions similaires

  1. Context menu sur expandable listview de plusieurs niveaux
    Par Willy55 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 13/03/2015, 10h34
  2. Réponses: 0
    Dernier message: 26/10/2014, 15h32
  3. position d'un item d'un listView via setOnTouchListener
    Par drick35 dans le forum Composants graphiques
    Réponses: 5
    Dernier message: 28/06/2013, 09h02
  4. Impossible de récupérer la valeur d'un menu déroulant
    Par kyake dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/10/2009, 16h00
  5. [Security] Acegi - Impossible de récupérer le contexte
    Par sgen13 dans le forum Spring
    Réponses: 1
    Dernier message: 21/07/2009, 12h54

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