Android 4.1.2-Dialoge werden zweimal genannt
Ich habe dieses Problem mit meiner app, wenn ich Anrufe, um einen dialog, es wird zweimal genannt, irgendwie. Dies geschieht nur mit android 4.1 und höher. Niedrigere version funktioniert gut, also ich glaube nicht, dass es ein code Problem.
Hast du gehört\begegnet diesem Problem vor?
hier der code:
Button edit = (Button) ad.findViewById(R.id.editBtn);
edit.setTypeface(roboto);
edit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
setDate();
ad.dismiss();
}
});
ad.show();
ad.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
shiftsActivity.setPressed(true);
}
});
}
public void setDate() {
//Initialize and open the set date dialog
DatePickerDialog setDateDialog = new DatePickerDialog(Shifts.this,
datePickerListener, dateAndTime.get(Calendar.YEAR),
dateAndTime.get(Calendar.MONTH),
dateAndTime.get(Calendar.DAY_OF_MONTH));
setDateDialog.setTitle("Set Date");
setDateDialog.show();
}
public void setStartTime() {
TimePickerDialog setStartTimeDialog = new TimePickerDialog(Shifts.this,
startTimePicker, dateAndTime.get(Calendar.HOUR),
dateAndTime.get(Calendar.MINUTE), true);
setStartTimeDialog.setTitle("Started At:");
setStartTimeDialog.show();
}
public void setEndTime() {
TimePickerDialog setEndTimeDialog = new TimePickerDialog(Shifts.this,
setEndTime, dateAndTime.get(Calendar.HOUR),
dateAndTime.get(Calendar.MINUTE), true);
setEndTimeDialog.setTitle("Ended:");
setEndTimeDialog.show();
}
TimePickerDialog.OnTimeSetListener startTimePicker = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
startIntHours = hourOfDay;
startIntMinutes = minute;
editStartTime = String.format("%02d", hourOfDay) + ":"
+ String.format("%02d", minute);
setEndTime();
}
};
TimePickerDialog.OnTimeSetListener setEndTime = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
finishIntHours = hourOfDay;
finsihIntMinutes = minute;
if (finishIntHours < startIntHours) {
finishIntHours = finishIntHours + Utility.HOURS_TIME_UNIT;
}
if (finsihIntMinutes < startIntMinutes) {
finsihIntMinutes = finsihIntMinutes + Utility.MINUTES_TIME_UNIT;
}
totalHours = finishIntHours - startIntHours;
totalMinutes = finsihIntMinutes - startIntMinutes;
Log.i("TotalHours in time picker", "" + totalHours);
Log.i("Totalminute in time picker", "" + totalMinutes);
editEndTime = String.format("%02d", hourOfDay) + ":"
+ String.format("%02d", minute);
replace(Shifts.view, Shifts.position);
}
};
- Der interessante Teil ist: wo ist
setStartTime
genannt - auf 4.0.3 funktioniert es normal
- Das ist wahr, beginnen die Probleme von 4.1 und höher.
- Ich habe aktualisiert, der code zum zählen der Aufrufe setStartTime, um ein besseres Verständnis der Strömung
- Was genau wird zweimal aufgerufen? Alle Dialoge, oder eine bestimmte?
- die setStartTime ist zweimal genannt, und setEndTime ist drei mal aufgerufen
- Bro, ich bin vor demselben problem, wie u es gelöst, plz erwähnen
- Das gleiche problem immer noch auf 4.4.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gemäß Ihrem code-weder von diese Methoden werden immer genannt, weil Sie nie die
TimePickerDialogs
.That being said, es ist ein bekanntes Problem in Bezug auf das Verhalten von
DatePickerDialog
/TimePickerDialog
, die relevant sein können: http://code.google.com/p/android/issues/detail?id=34833DateAndTimeActivity
hosten einerDatePicker
und einTimePicker
, anstatt Getue mit zwei separaten Dialogen.Hier ist eine einfache Lösung, für jemanden, der braucht eine TimeChooserDialog, dass nicht, rufen Sie den Hörer zweimal, mit den grundlegenden Optionen
Wenn man sich in der android-Quelle scheint es, dass onTimeSet() wird aufgerufen, während onStop(). Der dialog fordert auch onTimeSet() im onClick () - Methode.
Dies zu umgehen, hatte ich übersteuern die Dialoge schließen-und Abbrechen-Funktionen, die einen booleschen Wert setzen, die ich habe überprüft, ob die onTimeSet war aufgerufen wird, von der-Taste oder klicken Sie auf schließen/Abbrechen
Das gleiche Problem tritt bei mir seit TimePicker. Ich lösen, das Problem.
iShown() :
Gibt die Sichtbarkeit dieser Ansicht, und alle seine Vorfahren
Gibt
True, wenn diese Ansicht, und alle seine Vorfahren sind SICHTBAR
Ich versuche es und es funktioniert gut mit mir, wenn Sie immer noch Probleme haben, versuchen Den
classic singleton
Etwas wie dieses 🙂 mehr darüber Lesen.
Verwenden Sie nicht den eingebauten TimePickerDialog oder DatePickerDialog. Erstellen Sie stattdessen ein benutzerdefiniertes Dialogfeld wie das, was hier gezeigt. Es ist einfach und leicht zu bedienen und funktioniert einfach!
Anstatt gegen super.onClose() oder benutzerdefinierte Dialoge, die ich lösen es mit, indem er echte Zuhörer und Erweiterung TimePickerDialog, aktiviert und deaktiviert das weiterleiten von wrapper zu echten Zuhörer. Es ist nicht ein drop-in-Ersatz, aber es ist ordentlich genug.
Dann, es zu benutzen:
Stand ich vor diesem Problem, zeigt die timepicker zweimal. Ich habe überschrieben onStop() von TimePickerDialog und dass das Thema gelöst. Auch sollten Sie nicht nennen super.onStop (), die in Ihrem überschrieben onStop().