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
-
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:
