Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] calculateur d'IMC

Erreur onKey et onClick

    29 mai 2012 à 20:30:33

    Bonjour,
    J'apprend actuellement à programmer pour Android avec ce tuto (je remercie DakuTenshi au passage :p ). Malheureusement je suis bloqué à un endroit : la gestion des évènements sur les widgets :diable:
    Ce code provient du TP, le calculateur d'IMC:
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnKeyListener;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class Test_AndroidActivity extends Activity {
        // La chaîne de caractères par défaut
        private final String defaut = "Vous devez cliquer sur le bouton « Calculer l'IMC » pour obtenir un résultat.";
        // La chaîne de caractères de la méga fonction
        private final String megaString = "Vous faites un poids parfait ! Wahou ! Trop fort ! On dirait Brad Pitt (si vous êtes un homme)/Angelina Jolie (si vous êtes une femme)/Willy (si vous êtes un orque) !"; 
    	
        Button envoyer = null;
        Button raz = null;
    	
        EditText poids = null;
        EditText taille = null;
    	
        RadioGroup group = null;
    	
        TextView result = null;
    	
        CheckBox mega = null;
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
        	setContentView(R.layout.main);
        	
        	// On récupère toutes les vues dont on a besoin
        	envoyer = (Button)findViewById(R.id.calcul);
        	
        	raz = (Button)findViewById(R.id.raz);
        	
        	taille = (EditText)findViewById(R.id.taille);
        	poids = (EditText)findViewById(R.id.poids);
        	
        	mega = (CheckBox)findViewById(R.id.mega);
        	
        	group = (RadioGroup)findViewById(R.id.group);
        	
        	result = (TextView)findViewById(R.id.result);
        	
        	// On attribut un Listener adapté aux vues qui en ont besoin
        	envoyer.setOnClickListener(envoyerListener);
        	raz.setOnClickListener(razListener);
        	taille.setOnKeyListener(modificationListener);
        	poids.setOnKeyListener(modificationListener);
        	mega.setOnClickListener(checkedListener);
        }
        
        // Se lance à chaque fois qu'on appuie sur une touche en étant sur un EditText
        private OnKeyListener modificationListener = new OnKeyListener() {
            @Override
    	public boolean onKey(View v, int keyCode, KeyEvent event) {
    	    // On remet le texte à sa valeur par défaut pour ne pas avoir de résultat incohérent
    	    result.setText(defaut);
    	    return true;
    	}
        };
    	
        // Uniquement pour le bouton "envoyer"
        private OnClickListener envoyerListener = new OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!mega.isChecked()) {
    	        // Si la mega fonction n'est pas activée
    	        // On récupère la taille
    	        String t = taille.getText().toString();
    	        // On récupère le poids
    	        String p = poids.getText().toString();
    			
    	        float tValue = Float.valueOf(t);
    			
    	        // Puis on vérifie que la taille est cohérente
    	        if(tValue == 0)
    	            Toast.makeText(Test_AndroidActivity.this, "Hého, tu es un Minipouce ou quoi ?", Toast.LENGTH_SHORT).show();
    	        else {
    	    	    float pValue = Float.valueOf(p);
    		// Si l'utilisateur a indiqué que la taille était en centimètres
    		// On vérifie que la Checkbox sélectionnée est la seconde à l'aide de son identifiant
    		if(group.getCheckedRadioButtonId() == R.id.radio2)
    		    tValue = tValue / 100;
    		tValue = (float)Math.pow(tValue, 2);
    		float imc = pValue / tValue;
    		result.setText("Votre IMC est " + String.valueOf(imc));
    	    }
    	} else
    	    result.setText(megaString);
            }
        };
    	
        // Listener du bouton de remise à zéro
        private OnClickListener razListener = new OnClickListener() {
            @Override
    	public void onClick(View v) {
    	    poids.getText().clear();
    	    taille.getText().clear();
    	    result.setText(defaut);
    	}
        };
    	
        // Listener du bouton de la mega fonction.
        private OnClickListener checkedListener = new OnClickListener() {
            @Override
    	public void onClick(View v) {
    	    // On remet le texte par défaut si c'était le texte de la méga fonction qui était écrit
    	    if(!((CheckBox)v).isChecked() && result.getText().equals(megaString))
    	        result.setText(defaut);
    	}
        };
    }
    

    Seules erreurs : onClick et onKey:
    The method onClick(View) of type new View.OnClickListener(){} must override a superclass method        

    Un coup de main ? :)
    • Partager sur Facebook
    • Partager sur Twitter
      2 juin 2012 à 16:30:25

      J'ai essayer d'enlever les "@Override" comme le proposait éclipse et j'ai réussi à compiler :D Mais sa marche toujours pas :( Quand on clique sur les boutons sa met erreur :(
      • Partager sur Facebook
      • Partager sur Twitter
        15 juin 2012 à 16:44:30

        Personne ne saurait m'aider ? :(
        • Partager sur Facebook
        • Partager sur Twitter
          15 juin 2012 à 17:10:48

          Bonjour,

          Eclipse fait souvent le confusion entre le OnClickListener de JDK standard et celui d'Android.

          Pour enlever toute ambiguïté, déclareles tiens comme suit:

          private View.OnClickListener myListener = new View.OnClickListener() {
           // blabla y compris la fonction onCLick(View v)
          };
          
          • Partager sur Facebook
          • Partager sur Twitter
            15 juin 2012 à 17:37:07

            Merci mais il y a toujours une erreur qui persiste:
            private View.OnClickListener envoyerListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
            

            The method onClick(View) of type new View.OnClickListener(){} must override a superclass method        

            J'ai essayer d'écrire:
            private View.OnClickListener envoyerListener = new View.OnClickListener() {
                	@Override
                    public void View.onClick(View v)
            

            Mais...
            Syntax error on token ".", ; expected
            • Partager sur Facebook
            • Partager sur Twitter
              15 juin 2012 à 19:12:11

              Étrange...

              Voilà ce que ça donne chez moi et ça marche très bien:

              package test.plop;
              
              import android.app.Activity;
              import android.os.Bundle;
              import android.util.Log;
              import android.view.View;
              import android.view.View.OnClickListener;
              import android.widget.Button;
              
              public class PlopActivity extends Activity {
              	private Button b;
              	
                  /** Called when the activity is first created. */
                  @Override
                  public void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.main);
                      b = (Button) findViewById(R.id.btest);
                      
                      b.setOnClickListener(new OnClickListener() {
              			
              			@Override
              			public void onClick(View arg0) {
              				Log.i("TEST", "Hello !");
              			}
              		});
                  }
              }
              
              • Partager sur Facebook
              • Partager sur Twitter

              [Android] calculateur d'IMC

              × 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