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 :

Problème avec bouton Ok/annuler


Sujet :

Composants graphiques Android

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut Problème avec bouton Ok/annuler
    Bonjour.

    J'ai un petit problème, pas bien compliqué je pense, mais je ne parviens pas à trouver de l'aide sur internet.

    Dans mon activity, j'ai une listeView. Dans cette liste view, si on fait un long clique sur un item, je souhaite le supprimer.
    Mais avant, je veux afficher un message de confirmation.
    Afin d'interpréter le choix de l'utilisateur, j'utilise une variable booléenne (globale) qui vaut "true" s'il clique sur ok, "false" sinon.
    Ensuite j'ai un bloc "if" qui réalise une action si la variable vaut "true".
    Comme je supprime un item, je refait appel a mon activité courante afin de rafraichir la liste.
    Jusque là pas bien compliqué.

    Le problème c'est que l'action en question ne se réalise pas directement après l'appui sur ok, mais au prochain appui long sur un item.
    Comment puis-je faire pour que cette action se réalise directement à la suite de l'appui sur "ok" ? Par exemple ajouter un "wait" entre le clique et la condition if.

    Voici la partie de mon code qui correspond à un lonclick sur un item. La variable "ok" est déclarée en global initialisée à "false".

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    	       // ListView Item Click Listener (Lorsque l'on clique sur la liste)
            list.setOnItemLongClickListener(new OnItemLongClickListener() {
     
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view,
                   int positionIni, long id) {
                     	int position = positionIni-1;
     
     
                     	//Ouverture de la BDD
                		ticketBDD.open();
     
    	                //Récupération de l'objet ticket
    	        		Object tidi = security.get(position);
    	        		int indexTidi = security.indexOf(tidi)+1;
     
    	        		//Conversion de l'objet en String, utilisation de Regex pour trouver l'ID puis conversion de l'ID en int
    	        		String vect=(security.get(position)).toString();
    	        		String idt = findMatch(vect);
    	        		final int idts = Integer.parseInt(idt);
     
     
     
    	        		//on créé une boite de dialogue
    	        		AlertDialog.Builder adb = new AlertDialog.Builder(ticketDeleteActivity.this);
     
    	        		//on attribue un titre à notre boite de dialogue
    	        		adb.setTitle("Sélection Item N°"+indexTidi+" ID : "+idts);
     
    	        		//on insère un message à notre boite de dialogue, et ici on affiche le titre de l'item cliqué
    	        		adb.setMessage("DESCRIPTION : "+security.get(position));        		
     
    	        		//on indique que l'on veut le bouton ok et annuler à notre boite de dialogue
    	        		adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    	        			public void onClick(DialogInterface dialog, int which) {
     
    	    	        		ok = true;	
     
     
    	        			}
    	        		});
     
    	        		adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    		                public void onClick(DialogInterface dialog, int which) {
     
    		                	//Affichage d'un toast qu'aucun ticket n'a été supprimé
    		                	Toast.makeText(getApplicationContext(),
    		          	                 "No ticket deleted", Toast.LENGTH_SHORT)
    		          	                 .show();		                		
    		                	}
    		        		});
    	        		//on affiche la boite de dialogue
    	        		adb.show();
     
     
    	        		if (ok==true){
     
            				//Suppression du ticket (A remplacer par son ID et non la posiotion de son item)
        	        		ticketBDD.removeTicketWithID(idts);
     
        	        		//Afficheage d'un toast de confirmation de suppression
                        	Toast.makeText(getApplicationContext(),
                  	                 "Ticket "+idts+" deleted", Toast.LENGTH_SHORT)
                  	                 .show();
     
        	        		//Rafraichissement de la vue après suppression d'un ticket
        					Intent intent = new Intent(ticketDeleteActivity.this, ticketDeleteActivity.class);
        					startActivity(intent);
    	        		}
     
     
     
     
            		ticketBDD.close();
     
    		return true;
     
                }
            });
    Merci par avance si quelqu'un peut m'éclairer.

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par Berlo56
    Jusque là pas bien compliqué.
    Non, juste une bonne grosse mauvaise pratique : utiliser des globales lorsque c'est inutile.
    Enfin, appliquer à ton cas : mettre la responsabilité de l'action au mauvais endroit (donc un peu moins grave, mais architecturalement problématique tout de même).

    Extrait la suppression de l'item dans une méthode qui sera invoquée au clic sur OK, tout simplement.
    Ton code me paraît excessivement compliqué pour ce qu'il devrait réaliser. Le listener du toucher long te fourni la position dans la liste, donc avec cette information, tu as l'objet dans l'Adapter. Ainsi, tu peux directement requêter la BDD pour le supprimer. Pourquoi passes-tu par une requête ? Une regex ? Un cast en int ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    Merci pour les informations. En effet, je débute en JAVA et donc je ne suis pas très à l'aise avec toutes les fonctions disponible.
    Le truc c'est que la position dans la liste ne correspond pas forcément à l'ID de l'objet dans ma BDD. Plus précisément, l'objet à la position 4 par exemple ne signifie pas que l'ID de cet objet en BDD est 4. Voir le schéma ci-dessous.

    Position liste ID BDD
    ========= ============
    1 1
    2 4
    3 5
    4 7
    5 8
    6 11
    ========= ============

    Et j'ai créé une classe remobeObjetById(). Voilà pourquoi j'utilise une regex qui récupère l'ID directement de cet objet.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    C'est bon j'ai trouvé la solution.
    Si je n'avait pas géré la suppression de mon item directement dans la méthode invoquée au clique sur OK c'est parce que cela faisait planté mon application.
    En fait ça plantait parce que je pointait sur NULL. Il fallait juste que je rajoute BDD.open() et BDD.close() à l'intérieur de cette méthode.
    Merci Hizin pour ton aide.

    Voici le code fonctionnel.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    	       // ListView Item Click Listener (Lorsque l'on clique sur la liste)
            list.setOnItemLongClickListener(new OnItemLongClickListener() {
     
                @Override
                public boolean onItemLongClick(AdapterView<?> parent, View view,
                   int positionIni, long id) {
                     	int position = positionIni-1;
     
     
                     	//Ouverture de la BDD
                		ticketBDD.open();
     
    	                //Récupération de l'objet ticket
    	        		Object tidi = security.get(position);
    	        		int indexTidi = security.indexOf(tidi)+1;
     
    	        		//Conversion de l'objet en String, utilisation de Regex pour trouver l'ID puis conversion de l'ID en int
    	        		String vect=(security.get(position)).toString();
    	        		String idt = findMatch(vect);
    	        		final int idts = Integer.parseInt(idt);
     
     
     
    	        		//on créé une boite de dialogue
    	        		AlertDialog.Builder adb = new AlertDialog.Builder(ticketDeleteActivity.this);
     
    	        		//on attribue un titre à notre boite de dialogue
    	        		adb.setTitle("Sélection Item N°"+indexTidi+" ID : "+idts);
     
    	        		//on insère un message à notre boite de dialogue, et ici on affiche le titre de l'item cliqué
    	        		adb.setMessage("DESCRIPTION : "+security.get(position));        		
     
    	        		//on indique que l'on veut le bouton ok et annuler à notre boite de dialogue
    	        		adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    	        			public void onClick(DialogInterface dialog, int which) {
    	        				ticketBDD.open();     				
    	        				//Suppression du ticket (A remplacer par son ID et non la posiotion de son item)
    	    	        		ticketBDD.removeTicketWithID(idts);
     
    	    	        		//Afficheage d'un toast de confirmation de suppression
    	                    	Toast.makeText(getApplicationContext(),
    	              	                 "Ticket "+idts+" deleted", Toast.LENGTH_SHORT)
    	              	                 .show();
    	                    	ticketBDD.close();
    	    	        		//Rafraichissement de la vue après suppression d'un ticket
    	    					Intent intent = new Intent(ticketDeleteActivity.this, ticketDeleteActivity.class);
    	    					startActivity(intent);
    	    					finish();	
     
     
    	        			}
    	        		});
     
    	        		adb.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    		                public void onClick(DialogInterface dialog, int which) {
     
    		                	//Affichage d'un toast qu'aucun ticket n'a été supprimé
    		                	Toast.makeText(getApplicationContext(),
    		          	                 "No ticket deleted", Toast.LENGTH_SHORT)
    		          	                 .show();		                		
    		                	}
    		        		});
    	        		//on affiche la boite de dialogue
    	        		adb.show();
     
     
            		ticketBDD.close();
     
    		return true;
     
                }
            });

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

Discussions similaires

  1. Problème avec bouton annuler d'impression
    Par zanoubya dans le forum Débuter
    Réponses: 10
    Dernier message: 16/12/2008, 19h19
  2. problème avec bouton reset
    Par corentin59 dans le forum Langage
    Réponses: 2
    Dernier message: 23/01/2008, 12h06
  3. [CGI] problème avec bouton parcourir
    Par Leishmaniose dans le forum Web
    Réponses: 12
    Dernier message: 10/04/2007, 18h07
  4. Problème avec bouton radio sous IE.
    Par waldo2188 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 21/06/2006, 13h11
  5. Réponses: 24
    Dernier message: 11/01/2005, 11h12

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