DatePicker.OnDateChangedListener wird zweimal aufgerufen
Ich versuche eine app erstellen, wo der Benutzer wählt ein Datum aus einem DatePicker, und dann eine Liste aktualisiert wird, mit einigen Werte.
Meine GUI sieht wie folgt aus:
<LinearLayout
android:id="@+id/linearLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" >
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" >
</ListView>
</LinearLayout>
In der Erwägung, dass mein DatePicker-Initialisierung und Abwicklung wie folgt Aussehen:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
datePicker = (DatePicker) findViewById(R.id.datePicker);
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, month, day, dateSetListener);
}
private DatePicker.OnDateChangedListener dateSetListener = new DatePicker.OnDateChangedListener() {
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Calendar c = Calendar.getInstance();
c.set(year, monthOfYear, dayOfMonth);
System.out.println ("TEST");
}
};
In CatLog ich sehe, dass "TEST" string ausgegeben wird, zweimal, jedes mal, wenn ich spielen Sie mit den +/- Tasten auf dem widget. Was könnte das problem sein?
Hinweis: ich habe "deaktiviert" Liste-aktualisieren von code auf Zweck, um sicherzustellen, dass das problem nicht im Zusammenhang mit der ListView, wie im hier
Kommentar zu dem Problem
ultimate fangen bro @tomor
InformationsquelleAutor der Frage tomor | 2012-09-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich testen meiner Anwendung, Methode onDateSet zweimal genannt, nach akzeptieren der Auswahl des Datums und einmal, als ich abgesagt.
Ich fügte hinzu, eine Validierung der Methode onDateSet mit parameter-Ansicht, so etwas wie dieses
Ich hoffe, Ihnen zu dienen
InformationsquelleAutor der Antwort Cesardl
Ich es noch nicht geschafft zu finden, die ein ordentliches Update. Ich habe auch eher einen workaround gefunden, damit das Ereignis nicht ausgelöst, zweimal. Die Abhilfe ist wie folgt:
InformationsquelleAutor der Antwort tomor
Statt der onDateSet Rückruf habe ich überschriebenen onClick-Methode des DatePickerDialog dialog und Griff BUTTON_POSITIVE Klicks nur.
Code bleibt klar, aber noch ist es nicht klar, warum onDateSet zweimal aufgerufen.
InformationsquelleAutor der Antwort evgeny.myasishchev
InformationsquelleAutor der Antwort user1640247
Vielleicht ändern Sie die listener-Instanz durch hinzufügen von Variablen, auf diese Weise können Sie überprüfen, um zu sehen, ob Sie anders sind als das Letzte mal die Methode aufgerufen wurde:
InformationsquelleAutor der Antwort Graeme
InformationsquelleAutor der Antwort Nguyễn Văn Được
Bitte überprüfen Sie meine Antwort hier. Es ist für TimePickerDialog aber auch anwendbar für DatePickerDialog. Sie erstellen einen benutzerdefinierten dialog, es ist fast genauso so schnell und einfach und funktioniert einfach.
https://stackoverflow.com/a/25672760/940450
InformationsquelleAutor der Antwort iamronak
Nicht notwendig, um fügen Sie diesen code unter Jelly beans
InformationsquelleAutor der Antwort user3922209
Habe das gleiche problem, nur in der 4.2-version von android, es funktioniert mit 2.2 (ruft den Datum-listener nur einmal). Ich benutze einen datepicker-innen ein dialogfragment, mit einem callback für die Aktivitäten. Zu "lösen" das problem, das ich die gleiche Problemumgehung als Sie, so dass ich von Ihnen positiv bewertet werden Ihre Antwort, denn ich habe nicht gefunden, eine Erklärung für Sie.
InformationsquelleAutor der Antwort Andre Rocha