J'essaie de créer un ProgressDialog pour une application Android (juste une simple montrant à l'utilisateur que des choses se produisent, pas de boutons ou quoi que ce soit), mais je ne peux pas faire les choses correctement. J'ai parcouru des forums et des didacticiels ainsi que l'exemple de code fourni avec le SDK, mais en vain.
Voici ce que j'ai obtenu:
btnSubmit.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
(...)
ProgressDialog pd = new ProgressDialog(MyApp.this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("Working...");
pd.setIndeterminate(true);
pd.setCancelable(false);
// now fetch the results
(...long time calculations here...)
// remove progress dialog
pd.dismiss();
J'ai également essayé d'ajouter pd.show();
et j'ai dérangé avec le paramètre dans new ProgressDialog
, Ce qui n'a rien donné du tout (sauf les erreurs que le paramètre choisi ne fonctionnera pas), ce qui signifie: le ProgressDialog a gagné ' jamais se présenter. L'application continue de fonctionner comme si je n'avais jamais ajouté la boîte de dialogue.
Je ne sais pas si je crée la boîte de dialogue au bon endroit, je l'ai déplacée un peu mais cela n'a pas aidé non plus. Peut-être que je suis dans le mauvais contexte? Le code ci-dessus est à l'intérieur de private ViewGroup _createInputForm()
dans MyApp
.
Tout indice est apprécié,
vous devez appeler pd.show avant le début du long calcul, puis le calcul doit s'exécuter dans un thread séparé. Dès que ce thread est terminé, vous devez appeler pd.dismiss () pour fermer la boîte de dialogue prgoress.
ici vous pouvez voir un exemple:
le dialogue de progression est créé et affiché et un thread est appelé pour exécuter un calcul lourd:
@Override
public void onClick(View v) {
pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
Search search = new Search( ... );
SearchThread searchThread = new SearchThread(search);
searchThread.start();
}
et voici le fil:
private class SearchThread extends Thread {
private Search search;
public SearchThread(Search search) {
this.search = search;
}
@Override
public void run() {
search.search();
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
displaySearchResults(search);
pd.dismiss();
}
};
}
Je vous donne une solution, essayez ceci ... Définissez d'abord la boîte de dialogue de progression dans la méthode Activity before onCreate()
private ProgressDialog progressDialog;
Maintenant, dans la méthode onCreate
, vous pouvez avoir le bouton Any cliquer sur lequel vous allez modifier l'activité sur n'importe quelle action. Réglez simplement la barre de progression à cet endroit.
progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");
Utilisez maintenant le fil pour gérer la barre de progression pour afficher et masquer
new Thread()
{
public void run()
{
try
{
sleep(1500);
// do the background process or any work that takes time to see progress dialog
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
// dismiss the progress dialog
progressDialog.dismiss();
}
}.start();
C'est tout!
Ceci est également possible en utilisant AsyncTask . Cette classe crée un fil pour vous. Vous devez le sous-classer et remplir la méthode doInBackground(...)
.