Ich versuche Fragment mit einem ViewPager
using the zu verwenden FragmentPagerAdapter
. Was ich erreichen möchte, ist, ein Fragment auf der ersten Seite von ViewPager
durch ein anderes zu ersetzen .
Der Pager besteht aus zwei Seiten. Der erste ist der FirstPagerFragment
, der zweite ist der SecondPagerFragment
. Klicken Sie auf eine Schaltfläche der ersten Seite. Ich möchte das FirstPagerFragment
durch das NextFragment ersetzen .
Da ist mein Code unten.
public class FragmentPagerActivity extends FragmentActivity {
static final int NUM_ITEMS = 2;
MyAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
}
/**
* Pager Adapter
*/
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return NUM_ITEMS;
}
@Override
public Fragment getItem(int position) {
if(position == 0) {
return FirstPageFragment.newInstance();
} else {
return SecondPageFragment.newInstance();
}
}
}
/**
* Second Page FRAGMENT
*/
public static class SecondPageFragment extends Fragment {
public static SecondPageFragment newInstance() {
SecondPageFragment f = new SecondPageFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Log.d("DEBUG", "onCreateView");
return inflater.inflate(R.layout.second, container, false);
}
}
/**
* FIRST PAGE FRAGMENT
*/
public static class FirstPageFragment extends Fragment {
Button button;
public static FirstPageFragment newInstance() {
FirstPageFragment f = new FirstPageFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Log.d("DEBUG", "onCreateView");
View root = inflater.inflate(R.layout.first, container, false);
button = (Button) root.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.replace(R.id.first_fragment_root_id, NextFragment.newInstance());
trans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
trans.addToBackStack(null);
trans.commit();
}
});
return root;
}
/**
* Next Page FRAGMENT in the First Page
*/
public static class NextFragment extends Fragment {
public static NextFragment newInstance() {
NextFragment f = new NextFragment();
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Log.d("DEBUG", "onCreateView");
return inflater.inflate(R.layout.next, container, false);
}
}
}
... und hier die XML-Dateien
fragment_pager.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:padding="4dip"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</android.support.v4.view.ViewPager>
</LinearLayout>
first.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/first_fragment_root_id"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:id="@+id/button"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="to next"/>
</LinearLayout>
Nun das Problem ... in welcher ID soll ich verwenden
trans.replace(R.id.first_fragment_root_id, NextFragment.newInstance());
?
Wenn ich verwende R.id.first_fragment_root_id
, funktioniert der Ersatz, aber der Hierarchy Viewer zeigt ein seltsames Verhalten, wie unten.
Am Anfang ist die Situation
Nach dem Austausch ist die Situation
Wie Sie sehen, stimmt etwas nicht, ich erwarte, dass nach dem Ersetzen des Fragments derselbe Zustand wie im ersten Bild angezeigt wird.
Antworten:
Es gibt eine andere Lösung, bei der der Quellcode von
ViewPager
und nicht geändert werdenFragmentStatePagerAdapter
muss und die mit derFragmentPagerAdapter
vom Autor verwendeten Basisklasse funktioniert .Ich möchte zunächst die Frage des Autors beantworten, welche ID er verwenden soll. Es ist die ID des Containers, dh die ID des Ansichtspagers selbst. Wie Sie wahrscheinlich selbst bemerkt haben, führt die Verwendung dieser ID in Ihrem Code dazu, dass nichts passiert. Ich werde erklären warum:
Um
ViewPager
die Seiten neu zu füllen, müssen Sie zunächst den Aufruf aufrufennotifyDataSetChanged()
, der sich in der Basisklasse Ihres Adapters befindet.Zweitens wird
ViewPager
mit dergetItemPosition()
abstrakten Methode überprüft, welche Seiten zerstört und welche aufbewahrt werden sollen. Die Standardimplementierung dieser Funktion wird immer zurückgegebenPOSITION_UNCHANGED
, wodurchViewPager
alle aktuellen Seiten beibehalten werden und Ihre neue Seite folglich nicht angehängt wird. Damit das Ersetzen von Fragmenten funktioniert,getItemPosition()
muss es in Ihrem Adapter überschrieben werden und muss zurückgegeben werden,POSITION_NONE
wenn es mit einem alten, ausgeblendeten Fragment als Argument aufgerufen wird.Dies bedeutet auch, dass Ihr Adapter immer wissen muss, welches Fragment an Position 0
FirstPageFragment
oder angezeigt werden sollNextFragment
. Eine Möglichkeit, dies zu tun, besteht darin, beim Erstellen einen Listener bereitzustellenFirstPageFragment
, der aufgerufen wird, wenn es Zeit ist, Fragmente zu wechseln. Ich denke, dies ist eine gute Sache, damit Ihr Fragmentadapter alle Fragmentschalter und Aufrufe vonViewPager
und handhaben kannFragmentManager
.Drittens werden
FragmentPagerAdapter
die verwendeten Fragmente mit einem Namen zwischengespeichert, der von der Position abgeleitet ist. Wenn sich also an Position 0 ein Fragment befand, wird es nicht ersetzt, obwohl die Klasse neu ist. Es gibt zwei Lösungen, aber die einfachste besteht darin, dieremove()
Funktion von zu verwendenFragmentTransaction
, mit der auch das Tag entfernt wird.Das war viel Text, hier ist Code, der in Ihrem Fall funktionieren sollte:
Hoffe das hilft jedem!
quelle
FirstPageFragment.newInstance()
Listener-Parameter behandeln?Ab dem 13. November 2012 scheint das Ersetzen von Fragmenten in einem ViewPager viel einfacher geworden zu sein. Google hat Android 4.2 mit Unterstützung für verschachtelte Fragmente veröffentlicht. Es wird auch in der neuen Android Support Library v11 unterstützt, sodass dies bis auf 1.6 zurückreicht
Es ist der normalen Art, ein Fragment zu ersetzen, sehr ähnlich, außer dass Sie getChildFragmentManager verwenden. Es scheint zu funktionieren, außer dass der verschachtelte Fragment-Backstack nicht geöffnet wird, wenn der Benutzer auf die Schaltfläche "Zurück" klickt. Gemäß der Lösung in dieser verknüpften Frage müssen Sie popBackStackImmediate () im untergeordneten Manager des Fragments manuell aufrufen. Sie müssen also onBackPressed () der ViewPager-Aktivität überschreiben, in der Sie das aktuelle Fragment des ViewPager abrufen und getChildFragmentManager (). PopBackStackImmediate () darauf aufrufen.
Es ist auch etwas schwierig, das Fragment anzuzeigen, das gerade angezeigt wird. Ich habe diese schmutzige "android: switcher: VIEWPAGER_ID: INDEX" -Lösung verwendet, aber Sie können auch alle Fragmente des ViewPager selbst verfolgen, wie in der zweiten Lösung auf dieser Seite erläutert .
Hier ist mein Code für einen ViewPager mit 4 ListViews mit einer Detailansicht, die im ViewPager angezeigt wird, wenn der Benutzer auf eine Zeile klickt und die Schaltfläche "Zurück" funktioniert. Ich habe der Kürze halber versucht, nur den relevanten Code einzuschließen. Hinterlasse also einen Kommentar, wenn du die vollständige App auf GitHub hochladen willst.
HomeActivity.java
ListProductsFragment.java
quelle
Basierend auf der Antwort von @wize, die ich hilfreich und elegant fand, konnte ich teilweise das erreichen, was ich wollte, da ich wollte, dass die Fähigkeit zum ersten Fragment zurückkehrt, das einmal ersetzt wurde. Ich habe es geschafft, seinen Code ein bisschen zu modifizieren.
Dies wäre der FragmentPagerAdapter:
Um die Ersetzung durchzuführen, definieren Sie einfach ein statisches Feld des Typs
CalendarPageFragmentListener
und initialisieren Sie es mit dennewInstance
Methoden der entsprechenden Fragmente und rufen SieFirstFragment.pageListener.onSwitchToNextFragment()
bzw.NextFragment.pageListener.onSwitchToNextFragment()
auf.quelle
mFragmentAtPos0
beim Speichern des Aktivitätsstatus die Referenz zu speichern. Es ist nicht die eleganteste Lösung, funktioniert aber.Ich habe eine Lösung implementiert für:
Die Tricks, um dies zu erreichen, sind die folgenden:
Der Adaptercode lautet wie folgt:
Wenn Sie zum ersten Mal alle Registerkarten hinzufügen, müssen Sie die Methode createHistory () aufrufen, um den anfänglichen Verlauf zu erstellen
Jedes Mal, wenn Sie ein Fragment durch eine bestimmte Registerkarte ersetzen möchten, rufen Sie auf: replace (endgültige int-Position, endgültige Klasse fragmentClass, endgültige Bundle-Argumente)
Bei gedrücktem Zurück müssen Sie die Methode back () aufrufen:
Die Lösung funktioniert mit der Sherlock-Aktionsleiste und mit der Wischgeste.
quelle
tl; dr: Verwenden Sie ein Hostfragment, das für das Ersetzen des gehosteten Inhalts verantwortlich ist und den Verlauf der Rücknavigation verfolgt (wie in einem Browser).
Da Ihr Anwendungsfall aus einer festen Anzahl von Registerkarten besteht, funktioniert meine Lösung gut: Die Idee ist, den ViewPager mit Instanzen einer benutzerdefinierten Klasse zu füllen
HostFragment
, die in der Lage ist, den gehosteten Inhalt zu ersetzen und den eigenen Verlauf der Rücknavigation beizubehalten . Um das gehostete Fragment zu ersetzen, rufen Sie die Methode aufhostfragment.replaceFragment()
:Diese Methode ersetzt lediglich das Rahmenlayout durch die ID
R.id.hosted_fragment
durch das für die Methode bereitgestellte Fragment.In meinem Tutorial zu diesem Thema finden Sie weitere Details und ein vollständiges Arbeitsbeispiel für GitHub!
quelle
Einige der vorgestellten Lösungen haben mir sehr geholfen, das Problem teilweise zu lösen, aber es fehlt noch eine wichtige Sache in den Lösungen, die in einigen Fällen zu unerwarteten Ausnahmen und Inhalten schwarzer Seiten anstelle von Fragmentinhalten geführt hat.
Die FragmentPagerAdapter- Klasse verwendet die Element-ID, um zwischengespeicherte Fragmente in FragmentManager zu speichern . Aus diesem Grund müssen Sie auch die Methode getItemId (int position) überschreiben , damit sie z. B. position für Seiten der obersten Ebene und 100 + position für Detailseiten zurückgibt . Andernfalls würde das zuvor erstellte Fragment der obersten Ebene anstelle des Fragments auf Detailebene aus dem Cache zurückgegeben.
Außerdem teile ich hier ein vollständiges Beispiel für die Implementierung tabulatorähnlicher Aktivitäten mit Fragment- Seiten mithilfe von ViewPager und Registerkarten-Schaltflächen mithilfe von RadioGroup , die das Ersetzen von Seiten der obersten Ebene durch detaillierte Seiten ermöglichen und auch die Schaltfläche "Zurück" unterstützen. Diese Implementierung unterstützt nur eine Ebene des Backstapelns (Artikelliste - Artikeldetails), die Implementierung des Backstackings auf mehreren Ebenen ist jedoch unkompliziert. Dieses Beispiel funktioniert in normalen Fällen recht gut, außer dass eine NullPointerException ausgelöst wird, wenn Sie beispielsweise zur zweiten Seite wechseln, das Fragment der ersten Seite ändern (obwohl es nicht sichtbar ist) und zur ersten Seite zurückkehren. Ich werde eine Lösung für dieses Problem veröffentlichen, sobald ich es herausgefunden habe:
quelle
Ich habe einen ViewPager mit 3 Elementen und 2 Unterelementen für Index 2 und 3 erstellt und hier, was ich tun wollte.
Ich habe dies mit Hilfe früherer Fragen und Antworten von StackOverFlow implementiert und hier ist der Link.
ViewPagerChildFragments
quelle
So ersetzen Sie ein Fragment in einem
ViewPager
Sie können Quellcodes bewegenViewPager
,PagerAdapter
undFragmentStatePagerAdapter
folgenden Code - Klassen in Ihrem Projekt und fügen.in
ViewPager
:in FragmentStatePagerAdapter:
handleGetItemInvalidated()
stellt sicher, dass nach dem nächsten Aufruf vongetItem()
newFragmentgetFragmentPosition()
die Position des Fragments in Ihrem Adapter zurückgegeben wird.Um nun Fragmente zu ersetzen, rufen Sie auf
Wenn Sie an einem Beispielprojekt interessiert sind, fragen Sie mich nach den Quellen.
quelle
Funktioniert hervorragend mit der AndroidTeam-Lösung, aber ich stellte fest, dass ich die Fähigkeit brauchte, ähnlich wie zurück zu gehen
FrgmentTransaction.addToBackStack(null)
. Wenn ich dies jedoch nur hinzufüge, wird das Fragment nur ersetzt, ohne den ViewPager zu benachrichtigen. Wenn Sie die bereitgestellte Lösung mit dieser geringfügigen Verbesserung kombinieren, können Sie zum vorherigen Status zurückkehren, indem Sie lediglich dieonBackPressed()
Methode der Aktivität überschreiben . Der größte Nachteil ist, dass jeweils nur einer zurückgesetzt wird, was zu mehreren Rückklicks führen kannHoffe das hilft jemandem.
Auch was das
getFragmentPosition()
angeht, ist es ziemlichgetItem()
umgekehrt. Sie wissen, welche Fragmente wohin gehen. Stellen Sie einfach sicher, dass Sie die richtige Position zurückgeben. Hier ein Beispiel:quelle
In Ihrer
onCreateView
Methodecontainer
ist eigentlich eineViewPager
Instanz.Also einfach anrufen
ändert das aktuelle Fragment in Ihrem
ViewPager
.quelle
vpViewPager.setCurrentItem(1);
. Ich ging das Beispiel jeder Person durch, wobei jedes Mal nichts passierte, bis ich endlich zu Ihrem kam. Danke dir.ViewPager
auf eine andere Seite verschoben , es wird kein Fragment ersetzt.Hier ist meine relativ einfache Lösung für dieses Problem. Der Schlüssel zu dieser Lösung zu verwenden ,
FragmentStatePagerAdapter
anstattFragmentPagerAdapter
wie die erstere für Sie entfernen werden nicht verwendete Fragmente , während die später noch ihre Instanzen behalten. Das zweite ist die Verwendung vonPOSITION_NONE
in getItem (). Ich habe eine einfache Liste verwendet, um meine Fragmente zu verfolgen. Meine Anforderung bestand darin, die gesamte Liste der Fragmente auf einmal durch eine neue Liste zu ersetzen. Die folgende Liste konnte jedoch leicht geändert werden, um einzelne Fragmente zu ersetzen:quelle
Ich habe auch eine Lösung gemacht, die mit Stacks funktioniert . Es ist ein modularer Ansatz, sodass Sie nicht jedes Fragment und Detailfragment in Ihrem angeben müssen
FragmentPagerAdapter
. Es baut auf dem Beispiel von ActionbarSherlock auf, das sich ergibt, wenn ich direkt von der Google Demo App bin.Fügen Sie dies für die Funktion der Zurück-Schaltfläche in Ihrer MainActivity hinzu:
Wenn Sie den Fragmentstatus speichern möchten, wenn er entfernt wird. Lassen Sie Ihr Fragment die Schnittstelle implementieren und
SaveStateBundle
geben Sie in der Funktion ein Bundle mit Ihrem Sicherungsstatus zurück. Holen Sie sich das Bundle nach der Instanziierung vonthis.getArguments()
.Sie können eine Registerkarte wie folgt instanziieren :
funktioniert ähnlich, wenn Sie ein Fragment über einem Tab-Stapel hinzufügen möchten. Wichtig : Ich denke, es wird nicht funktionieren, wenn Sie zwei Instanzen derselben Klasse auf zwei Registerkarten haben möchten. Ich habe diese Lösung schnell zusammen gemacht, daher kann ich sie nur teilen, ohne Erfahrung damit zu haben.
quelle
Das Ersetzen von Fragmenten in einem Viewpager ist ziemlich aufwendig, aber sehr gut möglich und kann sehr schick aussehen. Zunächst müssen Sie den Viewpager selbst das Entfernen und Hinzufügen der Fragmente übernehmen lassen. Wenn Sie das Fragment in SearchFragment ersetzen, behält Ihr Viewpager seine Fragmentansichten bei. Sie erhalten also eine leere Seite, da das SearchFragment entfernt wird, wenn Sie versuchen, es zu ersetzen.
Die Lösung besteht darin, einen Listener in Ihrem Viewpager zu erstellen, der Änderungen außerhalb des Viewpagers verarbeitet. Fügen Sie diesen Code also zuerst am unteren Rand Ihres Adapters hinzu.
Anschließend müssen Sie in Ihrem Viewpager eine private Klasse erstellen, die als Listener fungiert, wenn Sie Ihr Fragment ändern möchten. Zum Beispiel könnten Sie so etwas hinzufügen. Beachten Sie, dass die gerade erstellte Schnittstelle implementiert wird. Wenn Sie diese Methode aufrufen, wird der Code in der folgenden Klasse ausgeführt.
Hier sind zwei wichtige Dinge zu beachten:
Beachten Sie die Listener, die im Konstruktor 'newInstance (Listener) platziert sind. So rufen Sie fragment0Changed (String newFragmentIdentification) `auf. Der folgende Code zeigt, wie Sie den Listener in Ihrem Fragment erstellen.
statisch nextFragmentListener listenerSearch;
Sie könnten die Änderung in Ihrem anrufen
onPostExecute
Dies würde den Code in Ihrem Viewpager auslösen, um Ihr Fragment an Position Null fragAt0 zu schalten und ein neues searchResultFragment zu werden. Es gibt zwei weitere kleine Teile, die Sie dem Viewpager hinzufügen müssten, bevor er funktionsfähig wird.
Eine davon wäre die getItem-Override-Methode des Viewpagers.
Ohne dieses letzte Stück würden Sie immer noch eine leere Seite bekommen. Ein bisschen lahm, aber es ist ein wesentlicher Bestandteil des viewPager. Sie müssen die getItemPosition-Methode des Viewpagers überschreiben. Normalerweise gibt diese Methode POSITION_UNCHANGED zurück, wodurch der Viewpager angewiesen wird, alles gleich zu halten, sodass getItem niemals aufgerufen wird, das neue Fragment auf der Seite zu platzieren. Hier ist ein Beispiel für etwas, das Sie tun könnten
Wie gesagt, der Code ist sehr kompliziert, aber Sie müssen grundsätzlich einen benutzerdefinierten Adapter für Ihre Situation erstellen. Die Dinge, die ich erwähnt habe, werden es ermöglichen, das Fragment zu ändern. Es wird wahrscheinlich lange dauern, bis alles eingeweicht ist, damit ich geduldig bin, aber alles wird Sinn machen. Es lohnt sich, sich die Zeit zu nehmen, da es eine wirklich gut aussehende Anwendung sein kann.
Hier ist das Nugget für die Handhabung des Zurück-Buttons. Sie fügen dies in Ihre MainActivity ein
Sie müssen in FragmentSearchResults eine Methode namens backPressed () erstellen, die fragment0changed aufruft. Dies in Verbindung mit dem Code, den ich zuvor gezeigt habe, wird das Drücken der Zurück-Taste behandeln. Viel Glück mit Ihrem Code, um den Viewpager zu ändern. Es erfordert viel Arbeit, und soweit ich festgestellt habe, gibt es keine schnellen Anpassungen. Wie gesagt, Sie erstellen im Grunde genommen einen benutzerdefinierten Viewpager-Adapter und lassen ihn alle erforderlichen Änderungen mithilfe von Listenern verarbeiten
quelle
Dies ist mein Weg, um das zu erreichen.
Zunächst einmal Add
Root_fragment
innerhalbviewPager
Tab , in dem Sie Schaltfläche klicken implementieren möchtenfragment
Ereignis. Beispiel;Zuallererst
RootTabFragment
sollteFragmentLayout
für Fragmentwechsel eingeschlossen werden.Dann
RootTabFragment
onCreateView
implementierenfragmentChange
Sie innen für IhreFirstPagerFragment
Implementieren Sie danach das
onClick
Ereignis für Ihre Schaltfläche im InnerenFirstPagerFragment
und nehmen Sie die Fragmentänderung erneut vor.Hoffe das wird dir helfen, Mann.
quelle
Ich habe eine einfache Lösung gefunden, die auch dann gut funktioniert, wenn Sie neue Fragmente in der Mitte hinzufügen oder das aktuelle Fragment ersetzen möchten. In meiner Lösung sollten Sie überschreiben,
getItemId()
welche eindeutige ID für jedes Fragment zurückgegeben werden soll. Nicht wie standardmäßig positioniert.Da ist es:
Hinweis: In diesem Beispiel
FirstFragment
undSecondFragment
erstreckt sich abstrakte Klasse PageFragment, wobei das Verfahren hatgetPage()
.quelle
Ich mache etwas Ähnliches wie Wize, aber in meiner Antwort kannst du zwischen den beiden Fragmenten wechseln, wann immer du willst. Und mit der wize-Antwort habe ich einige Probleme beim Ändern der Ausrichtung des Bildschirms und dergleichen. So sieht der PagerAdapter aus:
Der Listener, den ich in der Adaptercontaineraktivität implementiert habe, um ihn beim Anhängen an das Fragment zu setzen, ist die Aktivität:
Dann in das Fragment setzen Sie den Listener, wenn Sie einen Aufruf anhängen:
Und zum Schluss der Zuhörer:
quelle
Ich folgte den Antworten von @wize und @mdelolmo und bekam die Lösung. Vielen Dank, Tonnen. Ich habe diese Lösungen jedoch ein wenig optimiert, um den Speicherverbrauch zu verbessern.
Probleme, die ich beobachtet habe:
Sie speichern die Instanz,
Fragment
deren ersetzt wird. In meinem Fall ist es ein Fragment, das hält,MapView
und ich dachte , es ist teuer. Also behalte ich dasFragmentPagerPositionChanged (POSITION_NONE or POSITION_UNCHANGED)
statt sichFragment
selbst bei.Hier ist meine Implementierung.
Demo-Link hier .. https://youtu.be/l_62uhKkLyM
Für Demozwecke werden 2 Fragmente
TabReplaceFragment
undDemoTab2Fragment
an Position zwei verwendet. In allen anderen Fällen verwende ichDemoTabFragment
Instanzen.Erläuterung:
Ich gehe
Switch
von Aktivität zuDemoCollectionPagerAdapter
. Basierend auf dem Status dieses Schalters wird das richtige Fragment angezeigt. Wenn der Schalter Prüfung geändert wird, ich rufe dieSwitchFragListener
s‘onSwitchToNextFragment
Methode, wo ich den Wert bin ÄndernpagerAdapterPosChanged
der VariablenPOSITION_NONE
. Erfahren Sie mehr über POSITION_NONE . Dies macht das getItem ungültig und ich habe Logiken, um das richtige Fragment dort zu instanziieren. Entschuldigung, wenn die Erklärung etwas chaotisch ist.Nochmals ein großes Dankeschön an @wize und @mdelolmo für die ursprüngliche Idee.
Hoffe das ist hilfreich. :) :)
Lassen Sie mich wissen, ob diese Implementierung Mängel aufweist. Das wird für mein Projekt sehr hilfreich sein.
quelle
Nach Recherchen fand ich eine Lösung mit Funktionscode. Erstellen Sie zunächst eine öffentliche Instanz für ein Fragment und entfernen Sie Ihr Fragment einfach für onSaveInstanceState, wenn das Fragment bei einer Änderung der Ausrichtung nicht neu erstellt wird.
quelle