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 :

Evènement clic bouton dans un item d'une ListView


Sujet :

Composants graphiques Android

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut Evènement clic bouton dans un item d'une ListView
    j'ai une ListView composée d' items. chaque item contient des textView , une image et un bouton. Je voulais associer un évenement lors d'un clic sur un bouton pour ouvrir une boite d'alerte.

    voici le code :
    itemfilm.xml
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    <?xml version="1.0" encoding="utf-8"?>
     
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    	android:background="@drawable/border1" 
    	 android:id="@+id/Layout2"
    	android:layout_height="wrap_content"
    	android:layout_width="fill_parent"
    	android:orientation="horizontal">
     
     
               <ImageView
                android:id="@+id/img_film"
                android:layout_width="80dp"
                android:layout_height="100dp"
                android:layout_marginTop="0dip"
                android:layout_marginLeft="10dip"
                 />
     
     
    	<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/Layout3"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" 
        android:layout_marginTop="0dip"
        android:layout_marginLeft="10dip"
        >  
     
     
    	    <TextView
                       android:id="@+id/nom_film"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"
                       android:gravity="left"                    
                       android:layout_marginTop="10dip"
                       android:textSize="14sp" 
                       android:textStyle="bold" 
                       android:textColor="@android:color/white"                   
                       />
     
     
         <TextView
                       android:id="@+id/genre_film"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"                  
                       android:layout_marginLeft="0dp"
                       android:layout_marginTop="0dip"
                       android:textSize="12sp"                    
                       android:textColor="@android:color/white"                   
                       />   
                       <TextView
                       android:id="@+id/duree_film"
                       android:layout_width="wrap_content"
                       android:layout_height="wrap_content"                  
                       android:layout_marginLeft="0dp"
                       android:layout_marginTop="0dip"
                       android:textSize="12sp"                    
                       android:textColor="@android:color/white"                   
                       />  
             <TextView
                       android:id="@+id/lieu_film"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"                  
                       android:layout_marginLeft="0dp"
                       android:layout_marginTop="0dip"
                       android:textSize="12sp"                    
                       android:textColor="@android:color/white"                   
                       />  
                       <TextView
                       android:id="@+id/horaires_film"
                       android:layout_width="fill_parent"
                       android:layout_height="wrap_content"                  
                       android:layout_marginLeft="0dp"
                       android:layout_marginTop="0dip"
                       android:textSize="12sp"  
                       android:textColor="@android:color/white"                   
                       />  
                  <Button
                 android:id="@+id/btn_synopsis"
                 android:layout_width="100dp"
                 android:layout_height="wrap_content"
                 android:layout_gravity="right"
                 android:layout_marginTop="0dp"            
                 android:textStyle="italic"
                 android:textSize="12sp"
                 android:textColor="#800000"
                 />
     
     
        </LinearLayout>
     
    </LinearLayout>
    FilmActivity.java
    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
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
    public class FilmsActivity extends Activity /*implements OnClickListener*/{
    	private Button bt_synopsys; 
    	private ListView list_films;
     
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.films);
     
            list_films= (ListView) findViewById(R.id.listview_films);
           FillList();
     
     
           // bt_synopsys=(Button)findViewById(R.id.btn_synopsis);
            //bt_synopsys.setOnClickListener(this);
    }
    	private void FillList() {
    		//Création de la ArrayList qui nous permettra de remplire la listView
            ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
     
            //On déclare la HashMap qui contiendra les informations pour un item
            HashMap<String, String> map;
     
            //Création d'une HashMap pour insérer les informations du premier item de notre listView
            map = new HashMap<String, String>();
            //on insère un element image que l'on récupérera dans le textView img_film créé dans le fichier itemfilm.xml
            map.put("img_film",String.valueOf(R.drawable.image_film));
     
            map.put("nom_film", "Paul");
     
            map.put("genre_film", "Comédie, Romance");
     
            map.put("duree_film", "92min");
            map.put("lieu_film", "Cinéma El Manar1");
            map.put("horaires_film", "11h  16h   20h");
            map.put("btn_synopsis","Synopsis");
     
            //enfin on ajoute cette hashMap dans la arrayList
            listItem.add(map);
     
           //Création d'une HashMap pour insérer les informations du deuxième item de notre listView        map = new HashMap<String, String>();
            //on insère un element image que l'on récupérera dans le textView img_film créé dans le fichier itemfilm.xml
            map.put("img_film",String.valueOf(R.drawable.image_film));
     
            map.put("nom_film", "Un jour mon père viendra");
     
            map.put("genre_film", "Comédie, Romance");
     
            map.put("duree_film", "92min");
            map.put("lieu_film", "Cinéma El Manar1");
            map.put("horaires_film", "11h  16h   20h");
            map.put("btn_synopsis","Synopsis");
     
            //enfin on ajoute cette hashMap dans la arrayList
            listItem.add(map);
     
     
     
     
            //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue itemfilm.xml
            SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.itemfilm,
                   new String[] {"img_film", "nom_film", "genre_film","duree_film","lieu_film","horaires_film","btn_synopsis"}, new int[] {R.id.img_film, R.id.nom_film, R.id.genre_film, R.id.duree_film, R.id.lieu_film,R.id.horaires_film,R.id.btn_synopsis});
     
            //On attribut à notre listView l'adapter que l'on vient de créer
            list_films.setAdapter(mSchedule);
     
     
    	}
     
     
     
    	/*public void onClick(View v) {
     
    		//On instancie notre layout en tant que View
            LayoutInflater factory = LayoutInflater.from(this);
            final View alertDialogView = factory.inflate(R.layout.synopsys, null);
     
            //Création de l'AlertDialog
            AlertDialog.Builder adb = new AlertDialog.Builder(this);
     
            //On affecte la vue personnalisé que l'on a crée à notre AlertDialog
            adb.setView(alertDialogView);
     
            //On donne un titre à l'AlertDialog
            adb.setTitle("Synopsys");
     
            //On modifie l'icône de l'AlertDialog pour le fun ;)
            //adb.setIcon(android.R.drawable.ic_dialog_info);
     
            adb.setNeutralButton("Fermer",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                	//Lorsque l'on cliquera sur annuler on quittera l'application
                	dialog.cancel();
                	  
                } });
            
            
            adb.show();
    	}*/
     
     
     
     
    }
    Lors du clic sur le bouton "Synopsis", il y aura affichage d'une boite de dialogue qui affichera le synopsis du film.

    synopsis.xml
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:padding="15dip">
     
      <TextView
        android:id="@+id/Text_synop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="La vie de Paul bascule le jour où sa femme Sarah disparait subitement. Après une année de recherches infructueuses, Paul est un homme brisé, rongé par le doute et la culpabilité. Sa dernière chance est peut être de tout reprendre à zéro : déménager avec ses 2 enfants à Saint-Malo, la ville où il a grandit. Mais des rencontres inattendues vont donner à ce nouveau départ une tournure qu'il n'imaginait pas."
        android:paddingBottom="10dip" />
     
    </RelativeLayout>
    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 168
    Points : 212
    Points
    212
    Par défaut
    Retrouve l'item sélectionné t'aura l'index et à partir de ça tu fais ce que tu dois faire dans le onclick

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    je voulais faire le on click sur le bouton contenu dans l'item et non pas sur l'item en entier. si je recupere uniquement l'index de l'item ca sera un evenement sur l'item. est ce que je peux recupere l'index du bouton d'un item donné?

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Oui... quand tu construis la "view" de l'item, tu peux passer un tag aux views (comme le bouton). Ce tag peut être n'importe quel objet Java.
    Quand tu recois le on-click, tu n'as plus qu'à récupérer ce tag.

    Mais attention... un bouton dans un list-item est contraire aux politiques d'interface d'android... Il y a au moins quatre évenements possibles sur un item:
    * Click
    * Long click
    * Swipe left
    * Swipe right

    Il y a déjà de quoi faire.... En général on colle sur le long-click un "menu" des actions possibles sur l'item. Mais attention, il me semble que les recommandations ont changé depuis ICS.
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    Pouvez vous m'expliquer ce que je peux mettre comme code pour cela s'il vous plait, je suis débutante en android. Merci

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 168
    Points : 212
    Points
    212
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Mais attention, il me semble que les recommandations ont changé depuis ICS.
    Avec 2,9% de personnes avec ICS qui vont sur le Market, on s'en fout un peu de ceux qui en possèdent pour le moment lol

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Mais progression de 100% en un mois pour ICS !

    Bon... sinon, par exemple, un truc du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.itemfilm,
                   new String[] {"img_film", "nom_film", "genre_film","duree_film","lieu_film","horaires_film","btn_synopsis"}, new int[] {R.id.img_film, R.id.nom_film, R.id.genre_film, R.id.duree_film, R.id.lieu_film,R.id.horaires_film,R.id.btn_synopsis}),
     
    mSchedule.setOnItemClickListener(new ListView.OnItemClickListener() {
         public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
             Map<String,String> item = av.getItem(pos);
             String synopsis = item.get("btn_synopsis");
             Toast.makeToast(synopsis ,Toast.SHORT).show();
         }
    };
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    quand je mets ce code que vous m'avez prposé, ca ne marche , j'ai l'erreur suivante:
    the method getItem(int) is undefined for the Adapter View
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.itemfilm,
                   new String[] {"img_film", "nom_film", "genre_film","duree_film","lieu_film","horaires_film","btn_synopsis"}, new int[] {R.id.img_film, R.id.nom_film, R.id.genre_film, R.id.duree_film, R.id.lieu_film,R.id.horaires_film,R.id.btn_synopsis}),
     
    mSchedule.setOnItemClickListener(new ListView.OnItemClickListener() {
         public void onItemClick(AdapterView<?> av, View v, int pos, long id) {
             Map<String,String> item = av.getItem(pos);
             String synopsis = item.get("btn_synopsis");
             Toast.makeToast(synopsis ,Toast.SHORT).show();
         }
    };

  9. #9
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 587
    Points : 18 487
    Points
    18 487
    Par défaut
    Le nom de la méthode doit être différente c'est tout...
    Cherche un peu :
    http://developer.android.com/referen...apterView.html

    Une méthode avec get, item et position ça se trouve facilement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getItemAtPosition(position);
    av.getItemAtPosition(pos);
    Au lieu de av.getItem(pos);
    Keith Flint 1969 - 2019

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    oui je l'ai essayé avec un cast , ca ne génére pas d'eereur mais à l'éxécution rien ne se passe quand je clique sur le bouton.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Map<String,String> item =  (Map<String, String>) av.getItemAtPosition(position);
     String synopsis = item.get("btn_synopsis");
      Toast.makeToast(synopsis ,Toast.SHORT).show();

  11. #11
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 587
    Points : 18 487
    Points
    18 487
    Par défaut
    Pour tester essaie d'afficher quelque chose quand t'es dans le OnItemClick pour voir que cette méthode est bien appelé.

    Ensuite essaie d'afficher ta String synopsis, pour vérifier ce qu'il y a à l'intérieur.

    Et enfin c'est quoi Toast.makeToast(String string, int duration) ?

    Utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Toast.makeText(MonActivity.this, synopsis, Toast.SHORT).show();
    Bon alors peut être que t'as créé une fonction qui appelle cette méthode, mais appelle la directement pour voir.
    Keith Flint 1969 - 2019

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 98
    Points : 39
    Points
    39
    Par défaut
    J'essaie d'afficher un string "hello" dans le OnItemClick mais ca ne marche pas

    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
     
     
    public class FilmsActivity extends Activity /*implements OnClickListener*/{
    	private Button bt_synopsys; 
    	private ListView list_films;
     
    	@Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.films);
     
            list_films= (ListView) findViewById(R.id.listview_films);
           FillList();
     
     
           // bt_synopsys=(Button)findViewById(R.id.btn_synopsis);
            //bt_synopsys.setOnClickListener(this);
    }
    	private void FillList() {
    		//Création de la ArrayList qui nous permettra de remplire la listView
            ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
     
            //On déclare la HashMap qui contiendra les informations pour un item
            HashMap<String, String> map;
     
            //Création d'une HashMap pour insérer les informations du premier item de notre listView
            map = new HashMap<String, String>();
            //on insère un element image que l'on récupérera dans le textView img_film créé dans le fichier itemfilm.xml
            map.put("img_film",String.valueOf(R.drawable.image_film));
     
            map.put("nom_film", "Paul");
     
            map.put("genre_film", "Comédie, Romance");
     
            map.put("duree_film", "92min");
            map.put("lieu_film", "Cinéma El Manar1");
            map.put("horaires_film", "11h  16h   20h");
            map.put("btn_synopsis","Synopsis");
     
            //enfin on ajoute cette hashMap dans la arrayList
            listItem.add(map);
     
           //Création d'une HashMap pour insérer les informations du deuxième item de notre listView        map = new HashMap<String, String>();
            //on insère un element image que l'on récupérera dans le textView img_film créé dans le fichier itemfilm.xml
            map.put("img_film",String.valueOf(R.drawable.image_film));
     
            map.put("nom_film", "Un jour mon père viendra");
     
            map.put("genre_film", "Comédie, Romance");
     
            map.put("duree_film", "92min");
            map.put("lieu_film", "Cinéma El Manar1");
            map.put("horaires_film", "11h  16h   20h");
            map.put("btn_synopsis","Synopsis");
     
            //enfin on ajoute cette hashMap dans la arrayList
            listItem.add(map);
     
     
     
     
            //Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue itemfilm.xml
            SimpleAdapter mSchedule = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.itemfilm,
                   new String[] {"img_film", "nom_film", "genre_film","duree_film","lieu_film","horaires_film","btn_synopsis"}, new int[] {R.id.img_film, R.id.nom_film, R.id.genre_film, R.id.duree_film, R.id.lieu_film,R.id.horaires_film,R.id.btn_synopsis});
     
            //On attribut à notre listView l'adapter que l'on vient de créer
            list_films.setAdapter(mSchedule);
     
     
    	}
     
    	public void onItemClick(AdapterView<?> av, View v, int position, long arg3) {
     
    		 Map<String,String> item =  (Map<String, String>) av.getItemAtPosition(position);
            // String synopsis = item.get("btn_synopsis");
             Toast.makeText(this,"Hello", Toast.LENGTH_SHORT).show();

Discussions similaires

  1. Comment ajouter plusieurs données dynamiques dans un item d'une listview
    Par Rohan21 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 02/08/2014, 16h50
  2. [Débutant] [VB-WPF] - Ajouter un controle dans un item d'une listview ?
    Par troxsa dans le forum VB.NET
    Réponses: 3
    Dernier message: 20/07/2012, 09h33
  3. Réponses: 5
    Dernier message: 20/07/2011, 17h58
  4. Réponses: 5
    Dernier message: 28/09/2010, 16h57
  5. [VB2008E] Où stocker une valeur dans les items d'une combobox ?
    Par dsolheid dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/01/2008, 19h14

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