Android: ProgressDialog nicht zeigen
-
04-10-2019 - |
Frage
Ich versuche, eine ProgressDialog für einen Android-App (nur ein einfach man den Benutzer zeigt, dass Sachen geschehen, keine Knöpfe oder irgendetwas) zu schaffen, aber ich kann es nicht richtig machen. Ich war durch Foren und Tutorials sowie Sample-Code, der mit dem SDK kommt, aber ohne Erfolg.
Das ist, was ich habe:
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();
Ich habe auch versucht, das Hinzufügen pd.show();
und messed um mit dem Parameter in new ProgressDialog
in gar nichts daraus resultierenden (außer Fehlern, dass der gewählte Parameter wird nicht Arbeit), was bedeutet: die ProgressDialog wird nicht immer angezeigt. Die App gerade läuft weiter, als ob ich nie den Dialog hinzugefügt.
Ich weiß nicht, ob ich den Dialog an der richtigen Stelle bin zu schaffen, zog ich es ein wenig um, aber dass auch didnt't Hilfe. Vielleicht bin ich im falschen Kontext? Der obige Code ist innerhalb private ViewGroup _createInputForm()
in MyApp
.
Jeder Hinweis ist willkommen,
Lösung
Sie haben pd.show aufrufen, bevor die lange Berechnung beginnt und dann muss die Berechnung in einem separaten Thread ausgeführt werden. Ein schnell wie dieser Thread beendet ist, haben Sie pd.dismiss () aufrufen, die prgoress Dialog zu schließen.
Hier können Sie sehen, ein Beispiel:
die progressdialog wird erstellt und angezeigt, und ein Thread aufgerufen wird, eine schwere Berechnung auszuführen:
@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();
}
und hier das Thema:
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();
}
};
}
Andere Tipps
Ich gebe Ihnen eine Lösung für sie,
Versuche dies...
Definieren Sie zunächst den Fortschrittsdialog in der Aktivität vor onCreate()
Methode
private ProgressDialog progressDialog;
Jetzt im onCreate
Methode haben Sie vielleicht die eine beliebige Taste klicken, auf dem Sie die Aktivität auf jede Aktion ändern. Nur setzt dort die Progress Bar.
progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");
Jetzt Thread verwenden, um die Fortschrittsleiste ein- und ausblenden zu behandeln
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();
Das ist alles!
Dies ist auch möglich, mithilfe von AsyncTask . Diese Klasse erstellt einen Thread für Sie. Sie sollten es und füllen in der doInBackground(...)
Methode Unterklasse.