Dans ce tuto je vais mettre en place une page d’attente ou loading pour faire patienter, le temps de téléchargement de mon XML.
Pour faire cela je vais utiliser un thread, un thread permet de faire une action en parallèle de votre en action en cours.
Mes différentes variables.
LecteurFlux objLectFlux = new LecteurFlux();
private ListView mRecetteList;
private Context lecontext;
private static ArrayList> mylist;
protected ProgressDialog myProgressDialog;
final Handler uiThreadCallback = new Handler();
D’abord je crée ma barre de progression, que je lance.
myProgressDialog = ProgressDialog.show(ListePlatSemaine.this,
"", "Chargement", true);
je lance mon thread
new Thread() {
@Override public void run() {
// je récupére ici dans un tableau mes données xml
mylist = objLectFlux.renvoi_planning("1");
// appel de l'objet runnable qui s'execute a la fin du thread
uiThreadCallback.post(runInUIThread);
//j' arrete ici ma barre de progression
myProgressDialog.dismiss();
}
}.start();
J’ajoute un objet runnable qui s’execute à la fin de mon thread. Dans la méthode run de cet objet j’appelle ma méthode affiche_liste qui affiche ma listview
final Runnable runInUIThread = new Runnable() {
public void run() {
//méthode qui affiche la listeview
affiche_liste();
}
};
il faut préciser que j’ai mis ma variable mylist en static pour une utilisation globale.
le code en entier donne
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class ListePlatSemaine extends Activity implements
AdapterView.OnItemClickListener, View.OnClickListener {
LecteurFlux objLectFlux = new LecteurFlux();
private ListView mRecetteList;
private Context lecontext;
private static ArrayList> mylist;
protected ProgressDialog myProgressDialog;
final Handler uiThreadCallback = new Handler();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
lecontext =this;
myProgressDialog = ProgressDialog.show(ListePlatSemaine.this,
"", "Chargement", true);
final Runnable runInUIThread = new Runnable() {
public void run() {
affiche_liste();
}
};
new Thread() {
@Override public void run() {
mylist = objLectFlux.renvoi_list();
myProgressDialog.dismiss();
uiThreadCallback.post(runInUIThread);
}
}.start();
}
public void affiche_liste(){
setContentView(R.layout.liste1);
mRecetteList = (ListView) findViewById(android.R.id.list);
SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.afficheplanning,
new String[] {"train", "from"}, new int[] {R.id.date, R.id.recette});
//setListAdapter(new SpeechListAdapter(this));
mRecetteList.setAdapter(mSchedule);
mRecetteList.setOnItemClickListener(this);
}
public void onItemClick(AdapterView parent, View v, int position, long id) {
//click sur la liste view
Intent defineIntent = new Intent(lecontext,AfficheRecette.class);
//lecontext.startActivity(defineIntent);
HashMap aTableau= mylist.get(position);
Bundle b = new Bundle();
b.putString("Titre",aTableau.get("train")+"\n"+aTableau.get("from"));
b.putString("ingredient",aTableau.get("ingredient"));
b.putString("preparation",aTableau.get("preparation"));
defineIntent.putExtras(b);
lecontext.startActivity(defineIntent);
}
public void onClick(View v) {
int u=0;
}
}
Il est temps de mettre à profit les tutoriels d’Android France:
Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo