Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gros problème de compréhension des Listeners

    5 mars 2013 à 11:05:27

    Bonjour à tous,

    Je me suis lancé dans un projet d'application Android afin de la présenter en tant que projet pour mon BTS informatique.

    J'apprends donc avec le cours du SdZ !

    Par contre, j'ai un énorme problème de compréhension au niveau des Listeners, sa fait déjà un moment que je cherche, même avec d'autres cours mais en vain, impossible de faire afficher un pauvre texte à un foutu bouton !!

    Mes divers essais m'ont menées à ce résultat là :

    package com.example.infoviewreborn;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            
        }
    
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
        
        public void onCreate1(Bundle savedInstanceState)
        {
        
        super.onCreate(savedInstanceState);
        
        setContentView(R.layout.activity_main);
        
        Button monBouton = (Button)findViewById(R.id.bouton);
        monBouton.setOnClickListener((OnClickListener) this);
        	
        }
        
        
        
        public void onClick(View v)
        {
        
        if(v == monBouton){
        
        	Toast.makeText(this, "Coucou n°2", Toast.LENGTH_SHORT).show();
    
        				}
        
        }
        
        
        
        
        
    }
    

    Mais impossible de faire afficher le texte quand on clique sur ce foutu bouton !

    Si une âme charitable veux bien me donner un coup de main, mon rendu est dans 15 jours, donc j'ai pas beaucoup de temps, et là je patauge ...

    Je ne comprends pas non plus le fait que dans le cours on crée des vues " comme sa " alors que moi dès que je crée une classe comme : 

    public class AnonymousExampleActivity extends Activity

    Eclipse m'envoi chier en me disant qu'il doit être instancié dans son propre fichier, mais quel fichier, quoi, comment ????

    Merci !

    -
    Edité par Cookie83610 5 mars 2013 à 12:24:45

    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2013 à 14:27:04

      Bonjour,

      Pourquoi est-ce que tu as créé une méthode onCreate1 alors qu'il existe déjà la méthode onCreate ? :)

      • Partager sur Facebook
      • Partager sur Twitter
      Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
        6 mars 2013 à 11:53:37

        Bonjour,

        C'est parce que je ne comprends pas bien le rôle de la fonction onCreate, alors pour faire comme dans l'exemple, j'en ai créer une nouvelle ... Je n'ai pas du tout réussi non plus a utiliser 

        implements OnClickListener

        A la fin de ma classe, ça me sortait des erreurs, par contre, j'ai réussi à instancier un Listener qui fonctionne en déclarant une variable de type bouton au début de ma classe MainActivity, puis ensuite, dans ma fonction onCreate, à la suite, je défini un onClickListener attitrée à cette variable et Eclipse me sort tout seul le reste, je n'ai plus qu'a mettre mes instructions au bon endroit à cela fonctionne ainsi dans mon cas ... Je ne sais pas si c'est la bonne manière de faire mais sa marche ...

        Si quelqu'un peut m'expliquer un peu plus en détail le rôle de la fonction onCreate et me dire ou je dois mettre les choses que je rajoute à une page vierge ( tout dans le onCreate ?? )

        Merci !

        • Partager sur Facebook
        • Partager sur Twitter
          6 mars 2013 à 13:55:33

          Non, tu n'as pas bien compris le tutoriel Android du Site du Zéro. Pour faire court (parce que je ne vais pas retaper tout le cours ici), chaque écran sur ton terminal Android peut être vu comme une Activity. Chaque Activity possède des méthodes qui constituent son cycle de vie. Ces méthodes sont appelés automatiquement par Android à des moments spécifiques.

          La méthode onCreate est une méthode qui est appelé au lancement de ton application. C'est la première méthode qui est exécutée et qui est utilisée par les développeurs pour initialiser leurs activités. Il ne faut donc pas créer une nouvelle méthode mais utiliser cette méthode pour initialiser tes éléments. Première raison pour laquelle ton application ne fonctionne pas comme tu désires. Tu as créer une application qui ne sera jamais appelé (d'ailleurs eclipse devrait te souligner la signature de cette méthode en jaune pour te le signaler).

          Pour tes listeners, tu n'as pas compris le cours non plus. Ce que tu fais, c'est caster ton activité en OnClickListener sans l'implémenter. Tu dois donc d'abord implémenter OnClickListener dans ton activité, implémenter les méthodes que le listener t'oblige à déclarer et l'attacher à ta vue. Tu auras quelque chose comme ça (il est possible qu'il y ait des erreurs de syntaxe, je n'ai pas testé. Juste de tête.) :

          public class MainActivity extends Activity implements OnClickListener {
          	@Override
          	public void onCreate(Bundle onSavedBundle) {
          		super.onCreate(onSavedBundle);
          		setContentView(R.layout.activity_main);
          		Button button = (Button) findViewById(R.id.bouton);
          		button.setOnClickListener(this);
          	}
          
          	public void onClick(View v) {
          		// TODO Attacher un comportement au clique sur le bouton
          	}
          }

          Voilà, j'espère que cela t'aura aidé.

          • Partager sur Facebook
          • Partager sur Twitter
          Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
            6 mars 2013 à 14:46:24

            Ok, par contre je comprends pas trop la méthode avec le " implements OnClickListener " que je trouve compliqué ( et qui me génére des erreurs ), on m'as conseillé de procédé ainsi :

            public class MainActivity extends Activity {
             
                Button bouton = (Button)findViewById(R.id.bouton);
             
                @Override
                protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                     
                    this.bouton.setOnClickListener(new View.OnClickListener() {
             
                        @Override
                        public void onClick(View v) {
                            //ton code
                        }
             
                    });

            Qui revient un peu au même je pense mais qui pour moi est plus simple.

            Merci

            • Partager sur Facebook
            • Partager sur Twitter
              6 mars 2013 à 15:51:44

              Oui, il y a deux méthodes : celle que je t'ai mise dans l'autre topic (que tu as remise ci dessus) qui consiste à appliquer à ton bouton le listener que tu lui met entièrement dans la parenthèse :

              this.bouton.setOnClickListener(new OnClickListener() {
                  // Contenu de ton listener
              }

              Sinon, tu peux considérer que ton activité est elle-même un OnClickListener, dans ce cas ta classe (ton activité) devra implémenter l'interface OnClickListener, et en posséder la méthode onClick(). Du coup, tu appliquera à ton bouton le listener qui est ta classe (ton activité) elle même (this). Ca te donnera un truc comme ca :

              public class MainActivity extends Activity implements OnClickListener{
                
                  Button bouton;
                
                  protected void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.activity_main);
                        
                      bouton = (Button)findViewById(R.id.bouton);
                      bouton.setOnClickListener(this);
                  }
              
                  public void onClick(View v) {
                      //ton code
                  }
              }



              • Partager sur Facebook
              • Partager sur Twitter

              Gros problème de compréhension des Listeners

              × 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