1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
|
class MyActivity extends Activity implements OnItemSelectedListener {
...
Spinner spinner;
TextView progress;
// Remplacer "Championnat" par le type de donnée correspondant
// en général, une classe "Championnat" fera l'affaire.
class ListeChampionnat extends AsyncTask<Void,Void,ArrayList<Championnat>> {
@Override
protected void onPreExecute()
{
MyActivity.this.progress.setText("Chargement en cours..."); // <= R.string. plutôt
}
@Override
protected void onPostExecute(ArrayList<Championnat> liste) {
// la tâche est finie, on crée l'adapter qui va bien, et on met à jour le spinner.
ArrayAdapter<Championnat> adapter = new ArrayAdapter<Championnat>(...., liste);
MyActivity.this.spinner.setAdapter(adapter);
}
@Override
protected ArrayList<Championnat> doInBackground(Void ... params) {
// le vrai travail de la tâche est ici, et sera exécuté "en tâche de fond".
ArrayList<Championnat> ret = new ArrayList<Championnat>();
...
remplissage de la liste
...
return ret;
}
}
// remplacer ???? par le type de données voulues en sortie.
class ChargeTableau extends AsyncTask<Championnat,Void,????> {
@Override
protected ???? doInBackground(Championnat ... values) {
// le travail de lecture des données du championnat...
???? ret;
// on n'aura qu'un seul paramètre, c'est donc le premier qu'on utilise.
Championnat c = values[0];
... lecture du tableau (????) pour le championnat...
return ret;
}
protected void onPreExecute() {
MyActivity.this.progress.setText("Chargement championnat...");
}
protected void onPostExecute(???? data) {
// on a finit de lire les données, il est temps de les afficher...
MyActivity.this.displayTableau(data);
MyActivity.this.progress.setText("");
}
}
@Override
public void onCreate(Bundle saved)
{
super.onCreate(saved);
setContentView(R.layout.xxxxxx);
this.spinner = (Spinner) findViewById(R.id.spinner);
this.progress = (TextVew) findViewById(R.id.progressBar);
this.spinner.setOnItemSelectedListener(this);
// quand on commence l'activité on remplit la liste de championnats.
new ListeChampionnat().execute();
}
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
// quand un championnat est selectionné, on peut le récupérer directement depuis l'adapter.
Championnat c = (Championnat) parent.getAdapter().getItem(pos);
// et demander à l'afficher (à noter qu'on découple le fait que la fonction "displayChampionnat" utilise une tâche, ce n'est pas le problème de cette fonction.
displayChampionnat(c);
}
public void onNothingSelected(AdapterView<?> parent) {
// quand rien n'est selectionné, on n'affiche rien...
displayTableau(null);
}
public void displayChampionnat(Championnat c)
{
// afficher un championnat demander l'execution d'une tâche
new ChargeTableau().execute(c);
}
public void displayTableau(???? data)
{
// l'affichage des données du championnat.
if (data == null) {
// on efface tout
} else {
// on affiche tout
}
}
} |
Partager