Comment gérer le clic ListView dans Android


141

Comment écouter un événement de clic sur un ListView?

C'est ce que j'ai maintenant

ListView list = (ListView)findViewById(R.id.ListView01);  
...  
list.setAdapter(adapter);  

Quand je fais ce qui suit

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
   public void onItemSelected(AdapterView parentView, View childView, 
                                                         int position, long id) 
   {  
       setDetail(position);  
   }

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

Cela ne semble rien faire en un clic.
Et tout ce code vit dans une classe qui étend Activity.

Réponses:


182

Dans votre vue de liste, utilisez setOnItemClickListener


Merci David. Geezzz, j'ai essayé setOnClickListener et setOnItemSelectedListener mais j'ai manqué la lecture de setOnItemClickListener. Merci, Tee
teepusink

j'ai fait la même chose que teepusink: D
Shereef Marzouk

Comment envoyez-vous ensuite des données à cette vue détaillée? (Comme YouTube en cliquant sur une vidéo)
Sauron

Tout d'abord, la classe doit implémenter l'écouteur de clic: implémente OnItemClickListener Ensuite, définissez un écouteur sur ListView yourList.setOnItemclickListener (this); Et enfin, créez la méthode clic: @Override public void onItemClick (AdapterView <?> Parent, View view, int position, long id) {Toast.makeText (MainActivity.this, "You Clicked at" + countries [+ position], Toast.LENGTH_SHORT) .show (); }
bourax webmaster

88

Supposons que l'objet ListView soit lv, procédez comme suit:

lv.setClickable(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code like...
    String st = "sdcard/";
    File f = new File(st+o.toString());
    // do whatever u want to do with 'f' File object
    */  
  }
});

1
lvn'est pas accessible à l'intérieur onItemClick. Quelle est une bonne façon de contourner cela?
shinjin

1
@shinjin Rendez-le définitif. final ListView lv = (ListView) findViewById(R.id.your_list_view);
Lekensteyn

Object o = ((ListView)arg0).getItemAtPosition(position);
Voie

Voici le lien vers la documentation: developer.android.com/reference/android/widget/…
trinity420

42

Vous devez définir la vue gonflée «cliquable» et «capable d'écouter les événements de clic» dans la méthode getView () de la classe d'adaptateur.

convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);

et déclarez l'écouteur de clic dans votre ListActivity comme suit,

public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
                 //code to be written to handle the click event
    }
};

Cela n'est vrai que lorsque vous personnalisez l'adaptateur en étendant BaseAdapter.

Reportez-vous à ANDROID_SDK / samples / ApiDemos / src / com / example / android / apis / view / List14.java pour plus de détails


merci Vijay j'ai fait face à un problème de clic sur la vue
gonflée que

Mais cela ne détermine pas sur quel élément on clique, ce qui le rend plus ou moins inutile pour une liste? Correct?
autruche de la ferme

vous pouvez définir la balise sur convertView et vérifier la même chose dans onClick .. en utilisant la balise, l'élément sur lequel vous avez cliqué peut être identifié ...
Vijay C

J'ai trouvé une solution plus élégante qu'une balise dans votre adaptateur stocke une référence setOnClickListener et l'appelle sur la méthode onClick (View v). alors l'activité peut recevoir l'événement avec la position.
jocelyn

Votre méthode onClick est erronée. Cela devrait être onItemClick (AdapterView <?> Parent, View view, int position, long id)
IgorGanapolsky

17

Les deux réponses avant la mienne sont correctes - vous pouvez utiliser OnItemClickListener.

Il est bon de noter que la différence entre OnItemClickListeneret OnItemSelectedListener, bien que subtile, est en fait significative, car la sélection des éléments et la mise au point sont liées au mode tactile de votre AdapterView.

Par défaut, en mode tactile, il n'y a pas de sélection et de mise au point. Vous pouvez consulter ici pour plus d'informations sur le sujet.


8

Cette solution est vraiment minimaliste et ne gâche pas votre code.

Dans votre list_item.xml (PAS listView!) Attribuez l'attribut android: onCliquez comme ceci:

<RelativeLayout android:onClick="onClickDoSomething">

puis dans votre activité appelez cette méthode:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}

bonne solution mais, il n'y a aucun moyen d'obtenir la position de l'élément cliqué
Bilal Şimşek

@ BilalŞimşek Pendant longtemps, je n'ai plus Android, mais si le viewpeut avoir des métadonnées, cela pourrait être le moyen d'obtenir la position.
Amio.io le

6

Vous devez utiliser setOnItemClickListenerquelqu'un a dit.
Le code devrait ressembler à ceci:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // When clicked, show a toast with the TextView text or do whatever you need.
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
    }
});

5

Tout d'abord, la classe doit implémenter l'écouteur de clic:

implements OnItemClickListener

Ensuite, définissez un écouteur sur ListView

yourList.setOnItemclickListener(this);

Et enfin, créez la méthode clic:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show();
}

vous pouvez jeter un oeil et télécharger le code ici


3

Utilisez l'api setOnItemClickListener () dans votre activité. Voici l'exemple.

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
     // your code here.
}

});

1

Dans Kotlin, ajoutez un écouteur à votre liste Voir aussi simple que java

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.