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 :

onTouch ne fonctionne pas correctement


Sujet :

Android

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut onTouch ne fonctionne pas correctement
    Bonjour j'ai une application dans laquelle je gère une actionBar avec un bouton quitter. Il est censé s'afficher une boîte de dialogue demandant confirmation pour quitter. J'ai donc écrit ce code :
    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
    private void showActionBar() {
            ActionBar ab = getActionBar();
            LayoutInflater li = LayoutInflater.from(this);
            View customView = li.inflate(R.layout.rcms_action_bar, null);
            ab.setCustomView(customView);
     
            ImageButton ibItem1 = (ImageButton) customView.findViewById(R.id.exit);
            ibItem1.setBackgroundResource(R.drawable.slct_ic_exit);
            ibItem1.setOnTouchListener(new View.OnTouchListener() {
     
                @Override
                public boolean onTouch(View view, MotionEvent arg1) {
                    new AlertDialog.Builder(activity)
            	.setMessage("Are you sure you want to exit?")
            	.setCancelable(false)
            	.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                		public void onClick(DialogInterface dialog, int id) {
                    	activity.finish();
                		}
            	})
            	.setNegativeButton("No", null)
            	.show();
                 return true;
                }
            });
        }
    Quand j'appuie sur le bouton, la boîte de dialogue s'affiche. Si je clique sur non, il y en a une ou deux autres qui apparaissent derrière, surement parce que onTouch s'exécute tant qu'on reste appuyé...

    j'ai donc essayé avec onClick, et là, la première fois que je clique il ne se passe rien, puis ensuite le comportement est ok. D'ailleurs les autres boutons en dehors de l'actionBar on tous des méthodes onClick et n'ont pas ce problème.

    Comment faire pour afficher une fois et du premier coup la boîte de dialogue quand j'appuie sur mon bouton quitter sur l'actionBar ?
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Le code suivant ne fonctionne pas?
    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
     
    private void showActionBar() {
            ActionBar ab = getActionBar();
            LayoutInflater li = LayoutInflater.from(this);
            View customView = li.inflate(R.layout.rcms_action_bar, null);
            ab.setCustomView(customView);
     
            ImageButton ibItem1 = (ImageButton) customView.findViewById(R.id.exit);
            ibItem1.setBackgroundResource(R.drawable.slct_ic_exit);
            ibItem1.setOnClickListener(new View.OnClickListener() {
     
                @Override
                public void onClick(View view) {
                    new AlertDialog.Builder(activity)
            	.setMessage("Are you sure you want to exit?")
            	.setCancelable(false)
            	.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                		public void onClick(DialogInterface dialog, int id) {
                    	activity.finish();
                		}
            	})
            	.setNegativeButton("No", null)
            	.show();
                 return true;
                }
            });
        }

  3. #3
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    Si, la fenêtre apparait, quand je clique sur non elle apparait une deuxième fois. Ensuite, si je reclique sur non c'est bon... Je voudrais qu'elle n'apparaisse qu'une fois, d'autant plus que j'ai mis la même instance de AlertDialog dans onBackPressed() et que ça marche comme il faut (quand on clique sur non elle se ferme et c'est tout.)

  4. #4
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Points : 2 808
    Points
    2 808
    Par défaut
    Ce code fonctionne sure. Si tu as le même bug c'est que cela vient d'autre part:
    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
     
    DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener ()
    		{
    			@Override
    			public void onClick (DialogInterface dialog, int which)
    			{
    				switch (which)
    				{
    					case DialogInterface.BUTTON_POSITIVE:
    						activity.finish();
    						break;
     
    					case DialogInterface.BUTTON_NEGATIVE:
    						break;
    				}
    			}
    		};
     
    		AlertDialog.Builder builder = new AlertDialog.Builder (this);
    		builder.setMessage ("Are you sure you want to exit?")
    				.setPositiveButton ("yes", dialogClickListener)
    				.setNegativeButton ("no", dialogClickListener).show ();

  5. #5
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    J'avais abandonné l'idée vu que je n'arrivais pas à résoudre ce problème, puis j'ai eu de nouveau besoin d'utiliser un bouton personnalisé dans mon ActionBar. Même problèmes. avec onClick, la première fois qu'on clique, le lister n'écoute rien, mais après c'est bon. onTouch exécute plusieurs fois le code du listener.
    J'ai trouvé comment résoudre le problème de onTouch. Il suffit de mettre ceci dans le listener du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Override
        public boolean onTouch(View v, MotionEvent event) 
        {
            if(event.getAction() == MotionEvent.ACTION_UP)
            {
                //code
            }
            return true;
        }

Discussions similaires

  1. Internet explorer 7 ne fonctionne pas correctement
    Par innova dans le forum Windows XP
    Réponses: 17
    Dernier message: 30/05/2007, 10h10
  2. Réponses: 18
    Dernier message: 19/04/2007, 17h42
  3. [MySQL] Mon code ne fonctionne pas correctement
    Par bebas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 24/02/2007, 13h27
  4. Le débogage ne fonctionne pas correctement
    Par BNS dans le forum Visual C++
    Réponses: 4
    Dernier message: 13/07/2006, 13h59
  5. Réponses: 13
    Dernier message: 31/08/2005, 14h03

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