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!
Welchen Timer geben Sie an? –
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