In einer Android - Anwendung ich ein Datum aus einer Db in Laden im TableView
Innern ein Fragment
. Aber wenn ich das neu lade Fragment
, werden die vorherigen Daten angezeigt. Kann ich die Fragment
mit aktuellen Daten anstelle der vorherigen Daten neu füllen?
android
android-fragments
Samantha Withanage
quelle
quelle
Antworten:
Ich denke, Sie möchten den Fragmentinhalt beim Datenbank-Update aktualisieren
Wenn ja, nehmen Sie das Fragment ab und bringen Sie es wieder an
Your_Fragment_TAG ist der Name, den Sie Ihrem Fragment beim Erstellen gegeben haben
Dieser Code ist für die Support-Bibliothek.
Wenn Sie ältere Geräte nicht unterstützen, verwenden Sie einfach getFragmentManager anstelle von getSupportFragmentManager
[BEARBEITEN]
Für diese Methode muss das Fragment ein Tag haben.
Falls Sie es nicht haben, dann ist die Methode von @ Hammer genau das, was Sie brauchen.
quelle
Dadurch wird das aktuelle Fragment aktualisiert:
quelle
Falls Sie das Fragment-Tag nicht haben, funktioniert der folgende Code gut für mich.
quelle
getActivity()
in meiner Aktivität verwendet werden. Soll ich verwendenActivity.this...
?Sie können Ihr Fragment aktualisieren, wenn es für den Benutzer sichtbar ist. Fügen Sie diesen Code einfach in Ihr Fragment ein. Dadurch wird Ihr Fragment aktualisiert, wenn es sichtbar ist.
quelle
Zum Aktualisieren des Fragments funktioniert die akzeptierte Antwort unter Nougat und höher nicht. Damit es auf allen Betriebssystemen funktioniert, können Sie Folgendes tun.
quelle
Sie können das Fragment nicht neu laden, während es an eine Aktivität angehängt ist, bei der die
Fragment Already Added
Ausnahme " " angezeigt wird.Das Fragment muss also zuerst von seiner Aktivität gelöst und dann angehängt werden. Alles kann mit der fließenden API in einer Zeile durchgeführt werden:
Update: Hiermit werden die an API 26 und höher vorgenommenen Änderungen berücksichtigt:
Weitere Beschreibungen des Updates finden Sie unter https://stackoverflow.com/a/51327440/4514796
quelle
Dies funktioniert nur, wenn Sie
FragmentManager
das Fragment initialisieren. Wenn Sie es als<fragment ... />
XML haben, wird es nicht erneut aufgerufenonCreateView
. Ich habe meine 30 Minuten verschwendet, um das herauszufinden.quelle
Hier, was ich getan habe und es für mich funktioniert hat, benutze ich Firebase und wenn der Benutzer angemeldet ist, wollte ich zuerst das aktuelle Fragment aktualisieren. Sie müssen den Kontext aus der Aktivität anfordern, da das Fragment keine Möglichkeit hat, den Kontext abzurufen, es sei denn, Sie legen ihn hier unter Aktivität oder Kontext fest ist der Code, den ich in der Kotlin-Sprache verwendet und gearbeitet habe. Ich denke, Sie könnten ihn auch in der Java-Klasse verwenden
quelle
Verwenden Sie a
ContentProvider
und laden Sie Ihre Daten mit einem 'CursorLoader'. Mit dieser Architektur werden Ihre Daten bei Datenbankänderungen automatisch neu geladen. Verwenden Sie Frameworks von Drittanbietern für IhreContentProvider
- Sie möchten es nicht wirklich selbst implementieren ...quelle
Ich hatte das gleiche Problem, aber keines der oben genannten Probleme hat bei mir funktioniert. Entweder gab es ein Backstack-Problem (nach dem Laden, wenn der Benutzer zurück drückte, wurde das gleiche Fragment erneut angezeigt) oder es wurde das nicht aufgerufen
onCreaetView
endlich habe ich das gemacht:
Ein guter Punkt ist, dass Sie weder das Tag noch die ID des Fragments benötigen. wenn Sie neu laden möchten
quelle
Verwenden Sie die onResume-Methode ... sowohl für die Fragmentaktivität als auch für die Aktivität, die das Fragment enthält.
quelle
GeneralInfo
Es ist meine Fragment-KlasseGeneralInfo.java
Ich habe es als Methode in die Fragmentklasse eingefügt:
quelle
Schreiben Sie viewpagerAdapter.notifyDataSetChanged (); in onResume () in MainActivity. Viel Glück :)
quelle
Einfachster Weg
Erstellen Sie eine öffentliche statische Methode, die viewpager.setAdapter enthält
Adapter und Viewpager statisch machen
Rufen Sie überall, jede Aktivität, jedes Fragment an.
quelle