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

Composants graphiques Android Discussion :

Ouvrir une nouvelle Activity selon l'item cliqué dans une ListView


Sujet :

Composants graphiques Android

  1. #1
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut Ouvrir une nouvelle Activity selon l'item cliqué dans une ListView
    Bonjour,

    J'ai crée une activity avec une listview avec une douzaine d'item
    J'ai réussi à affiché un Toast en lien avec l'item cliqué:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // When clicked, show a toast with the TextView text
                    Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                        Toast.LENGTH_SHORT).show();
    J'ai réussi à faire en sorte d'ouvrir une nouvelle activity lorsqu'on clique sur un item
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
              	    Intent i = new Intent (getApplicationContext(), prologue.class);
          	        startActivity(i);
    Par contre je souhaite pouvoir ouvrir une activity différente selon l'item cliqué. Or pour le moment je lance l'activity prologue.java quelque soit l'item choisi.

    Je ne trouve pas de tuto sur ce sujet et ne voit pas comment faire (faut-il vraiment créer une activity pour chaque item cliqué ? ajouter un simpleadapter et comment ? ...)

    Merci pour votre aide.

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Citation Envoyé par clege Voir le message
    Je ne trouve pas de tuto sur ce sujet et ne voit pas comment faire (faut-il vraiment créer une activity pour chaque item cliqué ? ajouter un simpleadapter et comment ? ...)

    Merci pour votre aide.
    Tout dépends de ce que tu veux faire avec .

    tu peux toujours passer à la nouvelle activity un paramètre lui indiquant quel item a été choisi , ou tu peux appeler une activity par item , ou la fusion des deux choix .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Inscrit

    Profil pro
    Inscrit en
    Février 2008
    Messages
    658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 658
    Points : 892
    Points
    892
    Par défaut
    Affiche nous encore un peu de code encore car ton code à l'etat actuel est insuffisant pour utiliser afin de suivre le clic selon l'item.
    On a besoin du model qui se trouve dans le Listview et l'adapter...

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Tout dépends de ce que tu veux faire avec .

    tu peux toujours passer à la nouvelle activity un paramètre lui indiquant quel item a été choisi , ou tu peux appeler une activity par item , ou la fusion des deux choix .
    Je n'arrive à faire aucune de ces solutions. Je ne comprends pas comment arriver à "appeler une activity par item".

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Citation Envoyé par clege Voir le message
    tu peux toujours passer à la nouvelle activity un paramètre lui indiquant quel item a été choisi , ou tu peux appeler une activity par item , ou la fusion des deux choix ..
    à la nouvelle activity un paramètre lui indiquant quel item a été choisi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    listview.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     
      Intent intent = new Intent(getBaseContext() , NouvelleClass.class);     
      intent.putExtra("parametre1",tonparametre); 			  		  
      intent.putExtra("parametre2",tonparametre2);
    ...
    startActivity(intent); 
    }
    });

    tu peux appeler une activity par item

    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
    listview.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CallFunc(position);
    }
    });
     
    private void CallFunc(int position) {
    Intent intent = null ;
    switch (position) {
      case 1:
        intent = new Intent(getBaseContext() , NouvelleClass.class);
      break;
      case 2 :
       intent = new Intent(getBaseContext() , NouvelleClass2.class);
      break;
      ...
     
    }
    // pour éviter le if tu peux faire un return sur default du switch
    if(intent != null)
        startActivity(intent); 
    }
    la fusion des deux choix ..
    Tu peux appeller la fonction CallFunc , et tu n'auras qu'a ajouter des paramètre à l'intent avant l'appel .
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  6. #6
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Citation Envoyé par jahbromo Voir le message
    Affiche nous encore un peu de code encore car ton code à l'etat actuel est insuffisant pour utiliser afin de suivre le clic selon l'item.
    On a besoin du model qui se trouve dans le Listview et l'adapter...
    J'en suis là (et en train de regarder l'aide reçue plus haut):
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    package com.formation.co;
     
    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
     
    public class Main extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            String[] sours = getResources().getStringArray(R.array.sours_array);
            setListAdapter(new ArrayAdapter<String>(this, R.layout.sours, sours));
     
            ListView lv = getListView();
            lv.setTextFilterEnabled(true);
     
            lv.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    // When clicked, show a toast with the TextView text
                    Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                        Toast.LENGTH_SHORT).show();
     
     
              	  //When clicked evrywhere, open prologue.java
              	    Intent i = new Intent (getApplicationContext(), prologue.class);
          	        startActivity(i);
              }
            });
        } 
    }

  7. #7
    Membre habitué
    Inscrit en
    Novembre 2010
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 154
    Points : 130
    Points
    130
    Par défaut
    Yeeees
    Je pense bien avoir réussi grâce à votre aide.

    J'ai utilisé cette méthode:
    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
    listview.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CallFunc(position);
    }
    });
     
    private void CallFunc(int position) {
    Intent intent = null ;
    switch (position) {
      case 1:
        intent = new Intent(getBaseContext() , NouvelleClass.class);
      break;
      case 2 :
       intent = new Intent(getBaseContext() , NouvelleClass2.class);
      break;
      ...
     
    }
    // pour éviter le if tu peux faire un return sur default du switch
    if(intent != null)
        startActivity(intent); 
    }

    Merci beaucoup Feanorin (et à toi aussi jahbromo)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 104
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par clege Voir le message
    Yeeees
    Je pense bien avoir réussi grâce à votre aide.
    Salut à vous!
    Voilà j'ai utilisé la même méthode mais il y a un décalage par rapport à mes items...

    Je m'explique :

    Ma ListView comporte 3 items que l'on va appeler 1, 2 et 3 pour faire simple.

    Mon soucis est que quand je clique sur la case 1, rien ne se passe.sur la case 2, j'ai la case 1 qui s'affiche et la case 3 affiche la case 2...

    Si quelqu'un pouvait me donner un coup de main svp...

    la partie de code en rapport avec mon problème :
    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
     
    listView.setOnItemClickListener(new OnItemClickListener() {
            		   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            		    CallFunc(position);
            		}
            		});
        }
     
            		private void CallFunc(int position) {
            		Intent intent = null ;
            		switch (position) {
            		  case 1:
            		    intent = new Intent(getBaseContext() , AffichagePreferences.class);
            		  break;
     
            		  case 2 :
            		   intent = new Intent(getBaseContext() ,  CheminsPreferences.class);
            		  break;
     
            		  case 3 :
               		   intent = new Intent(getBaseContext() ,  RootPreferences.class);
               		  break;
     
            		}
            		if(intent != null)
            		    startActivity(intent);
            		}}
    Merci!


    EDIT :

    Bon et bien j'ai trouvé..

    Il fallait d'une part que je modifie mes HashMap puis commencer par la case 0 et non 1.

  9. #9
    Membre du Club
    Inscrit en
    Mars 2011
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 62
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    à la nouvelle activity un paramètre lui indiquant quel item a été choisi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    listview.setOnItemClickListener(new OnItemClickListener() {
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
     
      Intent intent = new Intent(getBaseContext() , NouvelleClass.class);     
      intent.putExtra("parametre1",tonparametre); 			  		  
      intent.putExtra("parametre2",tonparametre2);
    ...
    startActivity(intent); 
    }
    });

    tu peux appeler une activity par item

    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
    listview.setOnItemClickListener(new OnItemClickListener() {
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CallFunc(position);
    }
    });
     
    private void CallFunc(int position) {
    Intent intent = null ;
    switch (position) {
      case 1:
        intent = new Intent(getBaseContext() , NouvelleClass.class);
      break;
      case 2 :
       intent = new Intent(getBaseContext() , NouvelleClass2.class);
      break;
      ...
     
    }
    // pour éviter le if tu peux faire un return sur default du switch
    if(intent != null)
        startActivity(intent); 
    }
    la fusion des deux choix ..
    Tu peux appeller la fonction CallFunc , et tu n'auras qu'a ajouter des paramètre à l'intent avant l'appel .

    bonjour

    je utilise votre solution et merci bien c'est gentil
    mais j'ai un erreur

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    package com.pxr.tutorial.json;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.NodeList;
    
    import com.pxr.tutorial.xmltest.R;
    
    import android.app.ListActivity;
    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.ListAdapter;
    import android.widget.ListView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    
    public class Main extends ListActivity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.listplaceholder);
            
            ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
          
           
            JSONObject json = JSONfunctions.getJSONfromURL("http://monresto.net/android/json.php");
                    
            try{
            	
            	JSONArray  monrestodb1 = json.getJSONArray("monrestodb1");
            	
    	        for(int i=0;i<monrestodb1.length();i++){						
    				HashMap<String, String> map = new HashMap<String, String>();	
    				JSONObject e = monrestodb1.getJSONObject(i);
    				
    				map.put("name",  String.valueOf(i));
    	        	map.put("name", "zone:" + e.getString("cp"));
    	        	//map.put("magnitude", "Magnitude: " +  e.getString("magnitude"));
    	        	mylist.add(map);			
    			}		
            }catch(JSONException e)        {
            	 Log.e("log_tag", "Error parsing data "+e.toString());
            }
            
            ListAdapter adapter = new SimpleAdapter(this, mylist , R.layout.main, 
                            new String[] { "name", "magnitude" }, 
                            new int[] { R.id.item_title, R.id.item_subtitle });
            
            setListAdapter(adapter);
            
            final ListView lv = getListView();
            lv.setTextFilterEnabled(true);	
            lv.setOnItemClickListener(new OnItemClickListener() {
            	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {        		
            		@SuppressWarnings("unchecked")
    				HashMap<String, String> o = (HashMap<String, String>) lv.getItemAtPosition(position);	        		
            		Toast.makeText(Main.this, "NAME '" + o.get("name") + "' was clicked.", Toast.LENGTH_SHORT).show(); 
            		 CallFunc(position);
            		//Intent intent = new Intent(Main.this, Montplaisir.class);
            		//startActivity(intent);
            	}
            });
            private void CallFunc(int position) {
            	Intent intent = null ;
            	switch (position) {
            	  case 1:
            	    intent = new Intent(getBaseContext() , Montplaisir.class);
            	  break;
        }
    }}
    apres }); c'est erreur :Syntax error, insert "}" to complete MethodBody

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une Activity selon l'item cliqué dans une ListView
    Par LOLPLZ dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 10/03/2013, 23h09
  2. Réponses: 4
    Dernier message: 07/01/2013, 11h24
  3. Réponses: 0
    Dernier message: 16/04/2010, 13h35
  4. Réponses: 3
    Dernier message: 05/02/2010, 03h45
  5. Ouvrir un document Word présent sur le serveur dans une nouvelle page+enregistrement
    Par kenny49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/04/2007, 15h50

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