3.4 Les widgets de sélections
Ces widgets servent d’aide à la rédaction ou à la sélection d’éléments.
Ces widgets s’appuient sur des adaptateurs qui offrent une interface commune aux modèles de données sous-jacents d’un widget de sélection de données. Ils fournissent la liste des données et les convertissent en différentes vues spécifiques qui sont utilisées par le widget de sélection pour l’affichage.
3.4.1 Les différents sélectionneurs
Il y a 6 types de listes de sélections :
- La liste de base : ListView
- La combo box : Spinner
- Le GridView qui affiche les choix dans une grille
- L’AutoCompleteTextView qui affiche un sous-ensemble de données en utilisant l’entrée utilisateur comme filtre sur ces données. Les données sont affichées comme avec le Spinner.
- Les Galleries qui affichent les données sous forme d’une liste horizontale sont souvent utilisées pour la sélection d’images.
3.4.2 Exemple pour la ListView avec une activité qui étend ListActivity:
Cet exemple montre une liste et un champ texte. Quand on clique sur un item de la liste, le champ texte récupère la valeur de l’item sélectionné.
Trois choses sont importantes dans ce premier exemple :
- L’utilisation de android.R.layout.simple_list_item_1 dans la définition de l’ArrayAdapter qui définit comment seront présentés les items au sein de la liste.
- L’utilisation du tag @android :id/list comme identifiant de la ListView qui sera automatiquement interprété par l’ActivityList comme étant la liste principale.
- Mon activité étend ListActivity.
*/
public class ListViewTuto extends ListActivity {
/*** A text view */
TextView textView;
/*** The dummy data list */
String[] items = {"item1","item2","item3","item4","item5","item6" };
/** *The arrayAdapter that manage the data displayed */
ArrayAdapter<String> arrayAdapter;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
// Define the Adapter (Context, ListView Ressource, The items to display)
arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items);
//or using string values stored in the resources:
String[] itemsFromRes=getResources().getStringArray(R.array.itemsList);
arrayAdapter =new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
itemsFromRes);
//Set the ArrayAdapter to the ListActivity
setListAdapter(arrayAdapter);
//The text view that displays the current selected item
textView = (TextView) findViewById(R.id.text);
}
/* (non-Javadoc)@see android.app.ListActivity#onListItemClick(android.widget.ListView, android.view.View, int, long)
*/
public void onListItemClick(ListView parent, View v, int position, long id) {
textView.setText(items[position]);
}
}
Où le fichier xml de déclaration des éléments graphiques est :
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
/>
</LinearLayout>
Dans votre fichier strings.xml :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, ListViewTuto!</string>
<string name="app_name">ListViewTuto2</string>
<string-array>
<item>items1</item>
<item>items2</item>
<item>items3</item>
<item>items4</item>
<item>items5</item>
<item>items6</item>
</string-array>
</resources>