Wie mache ich einen Listener für eine Schaltfläche zum Abbrechen von Datumspickern in Android?

8

Ich verwende einen Datumsauswahl in Android, um den Benutzer das Datum wählen zu lassen. Ich möchte, dass es eine Sache macht, wenn der Benutzer ein Datum wählt und es setzt (ich habe das gut funktioniert) und dann ein bestimmtes Textfeld löscht, wenn der Benutzer die Abbrechen-Taste auf dem Datepicker drückt (öffne den Datepicker, aber annulliere dann davon).

Ich habe versucht, ein

zu machen %Vor%

dann tue ich

%Vor%

zum Anhängen des Listeners.

Mein Problem ist, dass der Hörer funktioniert, wenn der Benutzer die Zurück-Taste drückt, aber nicht, wenn er die Abbrechen-Taste drückt. Ich habe versucht, einen Ablehnungs-Listener zu verwenden, und das funktioniert, abgesehen davon, dass es auch dann losgeht, wenn ich den Datepicker setze oder abbreche!

Was muss ich tun, damit etwas passiert, wenn und nur wenn ich die Abbrechen-Taste auf meinem Datepicker drücke?

    
Adam 26.06.2010, 23:50
quelle

6 Antworten

4

Die einzige intuitive Lösung besteht darin, dass Sie die Abbrechen-Schaltfläche "überschreiben" müssen:

%Vor%     
EricLarch 11.08.2011 17:19
quelle
2

Sie können eine boolesche Variable isDataSet erstellen und in dateSetListener ausführen isDataSet = true; und dann fügen Sie onDismissListener mit einem solchen Code hinzu:

%Vor%

Vergessen Sie aber nicht, jedesmal, wenn Sie einen Dialog erstellen, isDataSet = false zu setzen.

    
dilix 24.08.2012 20:55
quelle
1

Nach einigen Experimenten habe ich festgestellt, dass ein OnDismissListener erforderlich ist, wie unten gezeigt. Beachten Sie, dass ich meine Lösung für einen TimePickerDialog entwickelt habe, aber setOnDismissListener von Dialog geerbt wurde, so dass es für einen DatePickerDialog genauso funktionieren sollte.

%Vor%

Ich habe das getestet und es funktioniert. In der Tat habe ich festgestellt, dass der OnDismissListener in den beiden Szenarien aufgerufen wird, die Sie erwähnen, wenn der Benutzer auf die Schaltfläche Abbrechen klickt und wenn sie die Schaltfläche Hardware zurück drücken. Du brauchst also nur diesen einen Handler.

Schließlich, jetzt, wo ich weiß, wofür man googeln muss, fand ich diesen Artikel , das den Unterschied zwischen einem OnDismissListener und einem OnCancelListener im Abschnitt "Verwenden von Dismiss Listeners" beschreibt:

    
Kenneth Baltrinic 21.11.2010 16:21
quelle
0

Versuchen Sie Folgendes:

%Vor%

(Sie müssen mTimeCancelListener so ändern, dass DialogInterface.OnClickListener anstelle von OnCancelListener implementiert wird)

    
cristis 27.06.2010 08:08
quelle
0

Die vollständige Lösung (getestet und funktioniert) besteht darin, den OnDismissListener (siehe obige Antwort 3 von Kenneth Baltrinic) zusammen mit dem von dilix beschriebenen onDateSet-Boolean zu kombinieren (1 Antwort oben). Sie brauchen beides, weil onDismiss in allen Fällen verwendet wird: (1) Benutzer hat tatsächliche Daten ausgewählt (2) Benutzer hat abgebrochen (3) Benutzer hat Hardware-Zurück-Taste gedrückt.

Mit der Kombination können Sie zwischen ihnen unterscheiden.

    
PeteH 14.11.2012 08:55
quelle
0

das ist die Lösung. es kann jedem helfen

%Vor%     
Amir 09.09.2015 11:36
quelle

Tags und Links