Dies ist ein seltsamer Fehler, mit dem ich im Moment zu kämpfen habe.Fragment bereits mit SwipeRefreshLayout hinzugefügt
Ich habe eine Aktivität, die ein Suchfragment anzeigt, sobald es die Initialisierung abgeschlossen hat. Das Suchfragment enthält eine Listenansicht zum Anzeigen der Ergebnisse und diese Listenansicht befindet sich in einem SwipeRefreshLayout, damit der Benutzer die Suchergebnisse aktualisieren kann.
Wenn der Benutzer ein Element aus der Liste auswählt, wird das Suchfragment entfernt und die übergeordnete Aktivität angezeigt (sie enthält andere Fragmente). Der Benutzer kann wählen, das Suchfragment zu öffnen und die Ergebnisse zu aktualisieren, wenn sie dies wünschen.
Das Verhalten, das ich habe, ist, dass, wenn sie die Swipe-Aktualisierung verwenden, wenn das Fragment zum ersten Mal geöffnet wird, es wie erwartet funktioniert. Wenn sie jedoch das Suchfragment schließen und es dann erneut öffnen und dann zum Aktualisieren nach unten wischen, wird die Ausnahme java.lang.IllegalStateException: Fragment already added
für das Suchfragment ausgelöst.
Der Code der Such fragmentieren das erste Mal einzuführen, ist:
@Override
protected void onPostExecute(Void empty) {
dismissSearchProgress();
getFragmentManager().beginTransaction().
setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left).
add(R.id.main_vwContent, mWoSearchFragment).commit();
}
Das zweite Mal, wenn der Code über eine Swipe-Aktion auf dem Bildschirm eingeführt wird:
case MotionEvent.ACTION_UP:
if (swipeInRange) {
/* do some other stuff */
getFragmentManager().beginTransaction().setCustomAnimations(R.animator.slide_in_left, 0, 0, R.animator.slide_out_left).add(R.id.main_vwContent, mWoSearchFragment).commit();
}
break;
Es gibt keine Fehler geworfen in der zweiten Instanz, es sei denn, sie wischen zum Aktualisieren nach unten. Der Fehler wird ausgelöst, bevor das Ereignis onRefresh ausgelöst wird.
Wer hat irgendwelche Ideen? Nicht sicher, welcher Code versucht, das Suchfragment erneut hinzuzufügen, da die Ausnahme in der Stack-Ablaufverfolgung keinen Code enthält und der Debugger nichts fängt.