Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Récup valeurs listeview

    15 mai 2012 à 15:56:04

    Bonjour,

    J'ai suivi le tuto : http://thibault-koprowski.fr/2010/10/1 [...] sous-android/ (sans avoir l'intention de faire une quelconque publicité).

    J'ai ma ListView qui contient toutes mes news et je souhaiterais à partir d'un clic renvoyer les valeurs dans une autre Activity.

    Et si vous regardez brièvement le lien que je vous ai fournis, c'est fait d'une telle manière que je n'y arrive pas.

    L'activity de la ListView :

    package com.commonsware.android.projetu2;
    
    import java.util.ArrayList;
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.ListView;
    import android.widget.TextView;
    
    public class ActivityOnglet1 extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.onglet1);
            ArrayList<Feed> feeds = ContainerData.getFeeds();
            for (Feed feed : feeds) {
    			Log.e("feedPlayer",feed.toString());
    		}
            
            ListFeedAdapter lfa = new ListFeedAdapter(this, feeds);
            ((ListView)findViewById(R.id.listFeed)).setAdapter(lfa);
            
            //Enfin on met un écouteur d'évènement sur notre listView
            ((ListView)findViewById(R.id.listFeed)).setOnItemClickListener(new OnItemClickListener() {
            	public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            		setContentView(R.layout.news);
            		TextView idNews = (TextView) findViewById(R.id.id);
            		TextView titreNews = (TextView) findViewById(R.id.titre);
            		feeds.get(position).getId()
            		String titre;
            		// Nous définissons notre intent en lui disant quelle classe il faut utiliser
                    Intent NewsView = new Intent(getApplicationContext(),NewsView.class);
                    // On lui transmet des paramètres, ici la position de l'entry du  feed que l'on voudra ouvrir
                    titre = titreNews.getText().toString(); 
                    NewsView.putExtra("position", position);
                    NewsView.putExtra("titre", titre);
                    // On démarre l'activity 
                    startActivity(NewsView);
     
                }
             });
            
        }
        
        
    }
    


    Et quand je vais de l'autre côté (dans l'autre Activity), il n'y a rien dans titre....


    Merci,


    KikooLoL
    • Partager sur Facebook
    • Partager sur Twitter
      15 mai 2012 à 17:17:00

      C'est surtout le code de la deuxième activity qui faut alors. Regarde tes logs aussi.
      • Partager sur Facebook
      • Partager sur Twitter
        15 mai 2012 à 19:05:55

        C'est à l'envoi que cela ne fonctionne pas, car la position se transmet très bien. Je ne comprends pas le souci...

        Est ce que je peux récupérer grâce à la position, le n-ème élément de la ListView (en l'occurence, un TextView pour le titre, et un autre pour le texte) ?

        Parce que ça vient peut être de là l'erreur.

        Merci,
        • Partager sur Facebook
        • Partager sur Twitter
          15 mai 2012 à 19:54:04

          bah j'ai l'impression que ton titre est mal affecté pour la variable String. là tu renvoie le texte contenu dans le champ titre dans le fichier XML ayant pour id R.id.titre.

          Tu n'a pas plutôt qqchose comme titre = feeds.get(position).getTitle();

          vérifie aussi si position commence à 1 ou à 0.
          • Partager sur Facebook
          • Partager sur Twitter
            15 mai 2012 à 20:20:00

            Bonsoir,

            Je n'ai pas été voir ton tutoriel mais ton code n'est vraiment pas beau ...
            • Je suppose que ta boucle sur ta liste de "feed", c'est simplement pour debugger. Sinon, je ne comprends pas son l'utilité.
            • Pourquoi ne pas garder la référence de ta ListView par un attribut à la place d'aller le récupérer à chaque fois dans le fichier XML ?
            • Pourquoi tu désérialises un nouveau fichier XML lorsque tu cliques sur un élément de la liste ? Actuellement, tu vas récupérer la valeur qui se trouve dans le TextView de ton fichier XML. Sans compter le fait que ce n'est pas la chose à faire, si tu n'indiques pas une valeur à l'attribut "text" de ton TextView dans ton fichier XML, c'est normal qu'il n'y a rien dans l'activité que tu lances lors du clique.
            Je te conseil de revoir les fondamentaux de la programmation Android. Je te redirige donc sur le tutoriel officiel Android du Site du Zéro et sur mon tutoriel en cours de rédaction pour gérer efficacement les ListView avec leurs adaptateurs personnalisées.
            • Partager sur Facebook
            • Partager sur Twitter
            Si vous voulez me retrouver, rendez-vous sur ZesteDeSavoir.
              15 mai 2012 à 21:52:02

              Oui la boucle sert à décoder.
              J'ai pas compris l'histoire de la référence. Peux tu me fournir un exemple?
              Mes news sont chargées dans des objets News qui contiennent des TextView et une ImageView. Et ils sont injectés dans la ListView. Je charge le XML pour récupérer le contenu des TextView (en mal certainement).

              J'ai suivi et appliqué le tutoriel à la lettre.. Il n'y a que l'événement onclick qui soit de moi.

              Merci à vous pour votre aide.


              Edit :

              package com.commonsware.android.projetu2;
              
              import java.util.ArrayList;
              
              import android.app.Activity;
              import android.content.Intent;
              import android.os.Bundle;
              import android.util.Log;
              import android.view.View;
              import android.widget.AdapterView;
              import android.widget.AdapterView.OnItemClickListener;
              import android.widget.ListView;
              import android.widget.TextView;
              
              public class ActivityOnglet1 extends Activity {
                  /** Called when the activity is first created. */
                  @Override
                  public void onCreate(Bundle savedInstanceState) {
                      super.onCreate(savedInstanceState);
                      setContentView(R.layout.onglet1);
                      ArrayList<Feed> feeds = ContainerData.getFeeds();
                      for (Feed feed : feeds) {
              			Log.e("feedPlayer",feed.toString());
              		}
                      
                      ListFeedAdapter lfa = new ListFeedAdapter(this, feeds);
                      ((ListView)findViewById(R.id.listFeed)).setAdapter(lfa);
                      
                      //Enfin on met un écouteur d'évènement sur notre listView
                      ((ListView)findViewById(R.id.listFeed)).setOnItemClickListener(new OnItemClickListener() {
                      	public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                      		//setContentView(R.layout.news);
                      		TextView idNews = (TextView) findViewById(R.id.id);
                      		TextView titreNews = (TextView) findViewById(R.id.titre);
                      		String titre;
                      		// Nous définissons notre intent en lui disant quelle classe il faut utiliser
                              Intent NewsView = new Intent(getApplicationContext(),NewsView.class);
                              // On lui transmet des paramètres, ici la position de l'entry du  feed que l'on voudra ouvrir
                              titre = titreNews.getText().toString(); 
                              NewsView.putExtra("position", position);
                              NewsView.putExtra("titre", titre);
                              // On démarre l'activity 
                              startActivity(NewsView);
               
                          }
                       });
                      
                  }
                  
                  
              }
              


              Ce code fonctionne, il m'envoie bien le titre. Par contre, quand je clique sur la 2nde ligne de ma ListView, il m'envoie le Titre de la position 0 (le premier choix de la liste ...).

              Edit 2 :

              J'ai vu qu'il y avait une fonction getItemAtPosition(position) mais j'ai du mal à comprendre comment elle fonctionne. Pourriez-vous m'aider ?


              Merci,
              • Partager sur Facebook
              • Partager sur Twitter

              [Android] Récup valeurs listeview

              × 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