Nous allons voir trois manières de faire
Cas simple
Quand les données sont de type simple, vous pouvez lier ces composants avec des ressources de type Array définies par exemple dans le fichiers /res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="sports">
<item >Basket</item>
<item >Football</item>
<item >Rugby</item>
</string-array>
</resources>
Au niveau de la définition du layout vous pourrez lier la liste de cette manière
<Spinner
android:id="@+id/spinner1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:entries="@array/sports">
</Spinner>
Gérer le cas clé/valeur
Si votre structure de donnée correspond à un ensemble clé/valeur vous pouvez vous en sortir avec deux listes dans votre composant. La première destinée à l’affichage des valeurs et la seconde pour conserver les ids au niveau de votre classe
On ajoute une liste d’id dans le fichier de resources
<integer-array name="sports_id">
<item >1</item>
<item >2</item>
<item >3</item>
</integer-array>
Dans l’activité vous pouvez retrouver au moment de la sélection d’un élément dans la liste le bon id en fonction de la position.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
spinner = (Spinner)this.findViewById(R.id.spinner1);
//Ajout Listener sur sélection dans la liste
spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int pos, long id) {
Toast.makeText(parent.getContext(),
"The sport is " + parent.getItemAtPosition(pos).toString() + " (id=" +
getResources().getIntArray(R.array.sports_id)[pos] + ")",
Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
Solution plus élégante
Dans la pratique les exemples sont souvent plus compliqués et nous avons l’habitude de gérer des objets. L’association entre le composant Spinner et une liste de valeurs peut se faire comme nous l’avons fait plus haut mais également du côté de l’activité dans le code Java.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.sports, android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
Vous pouvez donc surcharger la classe android.widget.ArrayAdapter pour personnaliser le comportement et passer une liste d’objets à cet Adapter. Un exemple d’implémentation est disponible sur github https://github.com/javamind/FeuilleDeMatch/blob/master/src/com/ehret/scoresheet/adapter/SpinnerCustomAdapter.java
Au niveau de l’activité on aura le code suivant
List<MatchTypeEvent> events = getIntent().getExtras().getParcelableArrayList(PARAM_SPORT_EVENTS);
Dans la pratique les exemples sont souvent plus compliqués et nous avons l’habitude de gérer des objets. L’association entre le composant Spinner et une liste de valeurs peut se faire comme nous l’avons fait plus haut mais également du côté de l’activité dans le code Java.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.sports, android.R.layout.simple_spinner_item);
spinner.setAdapter(adapter);
Vous pouvez donc surcharger la classe android.widget.ArrayAdapter pour personnaliser le comportement et passer une liste d’objets à cet Adapter. Un exemple d’implémentation est disponible sur github https://github.com/javamind/FeuilleDeMatch/blob/master/src/com/ehret/scoresheet/adapter/SpinnerCustomAdapter.java
Au niveau de l’activité on aura le code suivant
List<MatchTypeEvent> events = getIntent().getExtras().getParcelableArrayList(PARAM_SPORT_EVENTS);
SpinnerCustomAdapter<MatchTypeEvent> adapter = new SpinnerCustomAdapter<MatchTypeEvent>(this, android.R.layout.simple_spinner_item, events);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
faitSpinner.setAdapter(adapter);
Tous les exemples appliqués ici sur les Spinner sont aussi valables sur les ListView. Un exemple est disponible à l’adresse suivante https://github.com/javamind/FeuilleDeMatch/blob/master/src/com/ehret/scoresheet/ScoreSheetActivity.java
Article précédent / Sommaire / Article suivant
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
faitSpinner.setAdapter(adapter);
Tous les exemples appliqués ici sur les Spinner sont aussi valables sur les ListView. Un exemple est disponible à l’adresse suivante https://github.com/javamind/FeuilleDeMatch/blob/master/src/com/ehret/scoresheet/ScoreSheetActivity.java
Article précédent / Sommaire / Article suivant

je veux afficher un menu de ressources ou l'on pouvait faire un choix de categorie dans mon appli
RépondreSupprimer