Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Problème de variable

variable static

Sujet résolu
    7 juillet 2012 à 10:49:16

    Bonjour,

    Je voudrai créer une variable static, c'est à dire qu'elle n'est pas réinitialisée à chaque appelle de la méthode.
    private OnTouchListener onTouch = new View.OnTouchListener() {		
    	@Override
    	public boolean onTouch(View v, MotionEvent event)
    	{
    		private static int oldX = 0;    	
    		switch(event.getAction())
    		{
    			case MotionEvent.ACTION_DOWN:
    				v.setX(event.getX() + v.getX());
    				v.setY(event.getY() + v.getY());
    				break;
    			case MotionEvent.ACTION_MOVE:
    				v.setX(event.getX() + v.getX());
    				v.setY(event.getY() + v.getY());
    				break;
    			case MotionEvent.ACTION_UP:
    				v.setX(event.getX() + v.getX());
    				v.setY(event.getY() + v.getY());
    				break;
    		}
    		
    		return true;
    	}
    };
    

    Tout ce qu'il veut, c'est soit int, soit final int...
    Comment je peux faire ??? :/
    • Partager sur Facebook
    • Partager sur Twitter
      7 juillet 2012 à 11:09:43

      Il faut mettre la variable dans la classe, pas dans une méthode
      • Partager sur Facebook
      • Partager sur Twitter
        7 juillet 2012 à 11:26:44

        Oui mais le souci c'est que j'aimerai en avoir qu'une seule, et non une par objet :s
        • Partager sur Facebook
        • Partager sur Twitter
          7 juillet 2012 à 12:55:54

          Bonjour,

          Je n'ai pas testé mais mettre la variable au niveau de la classe et static ne fonctionnerait pas ? (mais si ça marche, ce n'est vraiment pas une bonne pratique).
          • Partager sur Facebook
          • Partager sur Twitter
          Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
            7 juillet 2012 à 19:49:31

            Oui, mettre la variable static dans la classe fonctionne...

            En faite le truc c'est que je veux faire en sorte que l'image ne "saute" pas sous le doigt.
            Je pensais faire la soustraction avec la variable static (qui vaut les coordonnées de l'event précédent) et les coordonnées de l'event présent, puis bouger l'image selon.
            Y a-t-il une autre façon de faire ? (ce doit être un problème assez populaire).
            • Partager sur Facebook
            • Partager sur Twitter
              7 juillet 2012 à 22:09:06

              Et stocker la variable dans l'Activity au lieu de la stocker dans le listener?
              • Partager sur Facebook
              • Partager sur Twitter
                8 juillet 2012 à 23:14:55

                Citation : SirThanos

                Oui mais le souci c'est que j'aimerai en avoir qu'une seule, et non une par objet :s



                Justement le principe d'une variable static c'est qu'elle est spécifique à la classe pas à ses instances.

                EDIT: Si ta variable n'est utilisée que par ta méthode onTouch() et pas par ton activité il n'est peut être pas nécessaire la déclarer static dans l'activité, mais simplement dans ton instance du Listener comme ça :
                private OnTouchListener onTouch = new View.OnTouchListener() {	
                
                        private int oldX = 0;
                	
                	@Override
                	public boolean onTouch(View v, MotionEvent event)
                	{
                		switch(event.getAction())
                		{
                			case MotionEvent.ACTION_DOWN:
                				v.setX(event.getX() + v.getX());
                				v.setY(event.getY() + v.getY());
                				break;
                			case MotionEvent.ACTION_MOVE:
                				v.setX(event.getX() + v.getX());
                				v.setY(event.getY() + v.getY());
                				break;
                			case MotionEvent.ACTION_UP:
                				v.setX(event.getX() + v.getX());
                				v.setY(event.getY() + v.getY());
                				break;
                		}
                		
                		return true;
                	}
                };
                


                En revanche si tu veux que la variable soit accessible par plusieurs listeners déclarés à différents endroits de ton code là il faut que ta variable soit statique à l'activité, ou alors il faut que tu crées une classe héritée de onTouchListener et que tu y déclares la variable statique, mais là ça devient compliqué pour pas grand chose.
                • Partager sur Facebook
                • Partager sur Twitter
                ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                  10 juillet 2012 à 12:29:38

                  Bonjour,

                  Merci pour vos réponse, je vais réfléchir à tout cela. =)
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [Android] Problème de variable

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown