Listener sur item sélectionné

 

Dans le cas d'un ListView, vous avez deux possibilités pour définir un listener:

 

Listener via ListActivity

- Vous n'avez qu'un ListView dans votre activité (en gros), vous pouvez définir votre activité de la manière suivante:

public class monActiviteActivity extends ListActivity { ... }

L'avantage de cette solution, vous n'aurez (pratiquement) plus rien d'autre à faire.

- Déclarer une méthode public void onListItemClick(ListView parent, View v, int position, long id) {
// Affichage de la donnée sélectionnée dans un textview
selection.setText(items[position]); // Pour afficher dans un textview l'élément sélectionné
}

parent est l'instance du widget List (ListView).

v est l'instance de type TextView de l'élément sélectionné.

position est l'index de l'élément dans la liste

id est l'id du widget

- Image non trouvée !Définir votre ListView avec un ID précis:@android:id/list

<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false">
</ListView>

C'est en effet cet ID (et uniquement celui là) que ListActivity recherche pour implémenter le listener dessus. Sans cela vous obtiendrez Des exceptions dont:

E/AndroidRuntime(965): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

 

Exemple de code via ListActivity

Voici le code TestActivity

Et le main.xml de l'activité

 

Exemple de code avec Activity et le listener OnItemClickListener

 

Il faudra implémenter cette méthode, donc : implements OnClickListener

Exemple de cas de définition

Dans la classe principale de votre activité.

 

 

code:

Dans ce code, vous ne partez plus d'une ListActivity, la méthode getListView() n'est plus utilisable, et la méthode onItemClick n'est plus disponible, il faut donc implémenter OnItemClickListener.

Il est courant d'utiliser une classe anonyme pour définir un listener. Cette solution pourra être intéressante si vous avez à gérer plusieurs ListView. L'écriture du code sera alors la suivante:

 

Image non trouvée !Rappel, une classe anonyme peut accéder aux methodes et aux attributs de la classe l'englobant. Il est donc tout à fait possible d'accéder à items.