2016-03-31 20 views
0

Ich versuche, eine USSD-Interaktion in Android nachzuahmen, indem Sie eine Reihe von Dialog-Menüs erstellen, die Sie in Android durchlaufen können. Gerade jetzt, (Dank an einen Benutzer, der mir geholfen on here!) Ich habe es so, dass zwischen den Dialogen gibt es einen Fortschritt Dialog, der "USSD-Code läuft ...", die für 2 Sekunden zwischen jedem Dialogfeld ausgeführt wird. Nun, mein Problem ist, dass ich den Fortschrittsdialog nicht mehr abbrechen kann, nachdem er ausgeführt wurde. Wenn ich mit den Dialogen fertig bin, gibt es mehrere Instanzen des Fortschrittsdialogs, die noch geöffnet sind und ausgeführt werden. Ich weiß, dass ich irgendwo den Befehl progress.cancel() in den Code einfügen muss, aber jeder Ort, an dem ich es versuche, scheint zu verhindern, dass der Fortschrittsdialog alles ausführt.Abbrechen ProgressDialog nach dem Ausführen zwischen Dialogen

Runnable progressRunnable; 

public void FirstScreen() { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    // Get the layout inflater 
    LayoutInflater inflater = this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog; pass null as the parent view because its going in the dialog layout 
    final View dialogView = inflater.inflate(R.layout.number_response_dialog, null); 
    builder.setView(dialogView) 
      .setMessage(R.string.MainMenuText) 
        // Add action buttons 
      .setPositiveButton(R.string.send, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // Send number to next dialog 
        String choice = getMenuChoice(dialogView); 
        if (choice.equals("5")) { 
         //Go to FirstTimeUse menu 
         progressRunnable = new Runnable() { 

          @Override 
          public void run() { 
           FirstTimeUse(); 
          } 
         }; 
         USSDprogressDialog(progressRunnable); 
        } else if (choice.equals("6")) { 
         //Something else 
        } else { 
         //Do nothing 
         dialog.dismiss(); 
        } 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // End session 
        dialog.dismiss(); 
       } 
      }); 
    AlertDialog dialog = builder.create(); 
    dialog.show(); 
} 

Und die eigentliche Fortschritt Dialog Hilfsmethode:

public void USSDprogressDialog(Runnable runnable) { 
    final ProgressDialog progress = new ProgressDialog(this); 
    progress.setMessage("USSD code running..."); 
    progress.show(); 

    Handler handler = new Handler(); 
    handler.postDelayed(runnable, 2000); 
} 

ich am Ende des USSDProgressDialog Verfahrens sowie innerhalb aller Dialoge versuchte, auch wenn USSDProgressDialog ausgeführt wird. Wo kann ich es noch hinzufügen, so dass es jedes Mal nach Ablauf des Timers abbrechen wird? Vielen Dank!

+0

Welchen Timer geben Sie an? –

+0

Es handelt sich um die in der USSDProgressDialog-Methode enthaltene Prozedur, bei der der Ausführungsvorgang am Ende für 2 Sekunden verzögert wird. (Es ist kein "Timer", aber es funktioniert) – notchopra

Antwort

0
final ProgressDialog progress = new ProgressDialog(this); 

Sie müssen außerhalb der USSDprogressDialog Funktion die Erklärung des Fortschritts Dialog setzen, so dass sie von allen anderen Funktionen der Aktivität zugegriffen werden kann. Initialisieren Sie den Fortschrittsdialog global.

Jetzt von der positiven Taste onClickListener versuchen, mit diesem Beispielcode.

if (choice.equals("5")) { 
    //Go to FirstTimeUse menu 
    progressRunnable = new Runnable() { 
     @Override 
     public void run() { 
      FirstTimeUse(); 
      // Now cancel the progress dialog here. 
      if(progress != null) progress.cancel(); 
     } 
    }; 

    USSDprogressDialog(progressRunnable); 
} 
Verwandte Themen