Wenn ich meine app starten läuft es eine AsyncTask
zu laden und dann in onPostExecute
ich dann setContentView
an das neue Layout dann ein Fragment mit zwei Knöpfen bietet zwei Modi durch einen hinzufügen FragmentTransaction
hinzufügen. Nachdem auf einen der beiden Modi geklickt wurde, wird das Fragment mit der Methode replace durch ein weiteres FragmentTransaction
ersetzt.Ersetzte Fragment noch sichtbar
Wenn die App abstürzt, kehrt sie zum ersten Bildschirm zurück und lädt die beiden Schaltflächen mit den beiden Modi. In diesem Fall wird, wenn einer der beiden Modi ausgewählt ist, das zweite Fragment geladen, aber jetzt ist der Hintergrund plötzlich transparent und zeigt die beiden unteren Schaltflächen an, und sie bleiben anklickbar. Wenn sie erneut angeklickt werden, ersetzen sie das Fragment ordnungsgemäß, so dass es unten nicht sichtbar ist. Das ist einfach komisch, ich kann nicht verstehen, was das verursachen könnte.
Ich habe diese beiden ähnlichen Fragen, one und two, recherchiert und gesehen, was darauf hindeutet, dass es daran liegen könnte, dass die ID falsch ist oder ich das Fragment in XML definiert habe. Keiner dieser beiden Faktoren ist der Fall.
Mein Code ist unten dargestellt:
Im Folgenden werde ich die Ladebildschirm ersetzen.
@Override
protected void onPostExecute(Void result) {
setContentView(R.layout.activity_main_screen);
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.add(R.id.fragment_container, new ModeFragment())
.commit();
}
Nach dem, wenn eine Schaltfläche geklickt wird ich das Fragment passieren Ich wünsche den Strom mit in dieses Verfahren unten ersetzen:
private void replaceCurrentFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
transaction.replace(R.id.fragment_container, fragment)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(null).commit();
}
Dies funktioniert beim ersten Mal, aber wenn ein Absturz auftritt, dann Die App kehrt zum ersten Fragment zurück und beim zweiten Mal, wenn diese Methode übergeben wird, ist das neue ersetzende Fragment halb unsichtbar. Ein Klick auf den Button des ersten Fragments ruft diese Methode erneut auf und es ist nun in Ordnung.
Offensichtlich möchte ich nicht, dass die App abstürzt, also sollte dies nicht auftreten, aber ich habe das Gefühl, dass etwas nicht stimmt, wie ich meinen Code schreibe.
Dies sollte ein Kommentar sein als eine Antwort. –
nein es ist nicht, das ist auch angemessen, um eine Antwort zu sein. – Zyoo
Mein Problem war mit dem Hintergrund-Attribut im HoloGraph-Element (eine kleine Bibliothek zum Zeichnen von Diagrammen) in der XML-Layout-Datei meiner Zusammenfassung. Ich habe dieses Attribut gelöscht und es hat funktioniert. Ich habe mein Fragment nach dem Lösen ersetzt, um das Fragment zu aktualisieren, aber ich musste das Fragment nicht ersetzen, ich musste nur trennen, anhängen (ruft onCreateView des Fragments auf) und committen. Wenn Sie ein ähnliches Problem haben und Daten an Ihr Fragment übergeben müssen, empfehle ich eine Änderung, bei der Sie die Daten aus dem Bündel des Fragments in einige Felder einer anderen Klasse speichern. Greifen Sie auf sie in onCreateView des Fragments zu. – Metallica