Verwendung von onQueryTextChange mit vielen Fragmenten

8

Ich habe viele Fragmente, die in 2 Tablayouts angezeigt werden, indem FragmentStatePagerAdapter verwendet wird. In jedem Fragment gibt es eine Recycler-Ansicht und ich möchte eine Suchleiste in der App-Leiste verwenden, um Ergebnisse zu filtern.

Zuerst habe ich diese das onQueryTextChange listener im onCreateOptionsMenu mit und es funktionierte mit ein paar Fragmenten gut, aber wenn ich hinzugefügt, um die Umsetzung zu den anderen Fragmenten (nur Strg + C und Strg + v) es aufgehört zu arbeiten, keine Ergebnisse sogar auf Fragmente, dass es ich dann hier arbeiten verwendet lesen besser war das onQueryTextChange listener in onPrepareOptionsMenu in einem Versuch zu bleiben ein Problem mit invalidateOptionsMenu aber ich beschlossen, geben, dass ein Versuch, die auch gearbeitet und dann, wenn ich hinzugefügt, um die Methoden, um all meinen anderen Fragmenten noch einmal versagt, es zu vermeiden, aber es funktioniert auf einem Eine Handvoll von Fragmenten, die seltsamerweise alle mit demselben Elternfragment verbunden sind, aber der Code für die 4 Elternfragmente und für den Aufruf derselben ist identisch.

Ein anderer Weg, den ich gelesen habe, ist creating an interface und ich benutze das von meiner Hauptaktivität, indem ich einen Verweis auf das aktuelle Fragment bekomme, aber dann muss ich das aktuell angezeigte Fragment von meinem Viewpager bekommen, was ich nicht weiß kann mir jemand das für mich einrechnen,

Vielen Dank

Und danke für die tolle Bearbeitung lol

BEARBEITEN Versucht, die Schnittstelle Ansatz ohne Erfolg, obwohl ich noch ein Anfänger bin ich tun muss das beigefügte Fragment finden und mit einem fragmentstateviewpager seine einfach nicht möglich, ohne Hacks dort verwendet, muss einen Grund geben, warum es in einigen Werken und in anderen nicht und manchmal nicht überhaupt

2 bearbeiten

Also fummle ich immer noch damit herum und ich hatte fast keine Antworten, also lasst mich das ein wenig austüfteln, also habe ich das Menülayout in der Haupttätigkeit wie folgt hinzugefügt

%Vor%

und dann fügen Sie ihm einen Listener aus dem Fragment in onPrepareOptionsMenu wie folgt hinzu

%Vor%

, und ich habe setHasOptionsMenu (true) in onCreateView des Fragments genannt, das funktioniert perfekt, aber ich habe etwa 20 Fragmente, um durch, und wenn ich das den anderen Fragmenten hinzufügen versagt sie es entweder gar nichts oder macht den Blick leer oder in seltenen Fällen funktioniert, aber für mich, das sagt mein Code in Ordnung ist und seine vielleicht ein Lebenszyklus Sache, ive versuchte es aus der onCreateOptionsMenu der Fragmente und erreicht die gleichen Ergebnisse fordern, und ive versuchte noch nichts von der MainActivity in onCreateOptions Aufruf außer aufblasen das Menü und ermöglichen den Fragmenten, die Suchaktivität mit

aufzurufen %Vor%

was wieder zu ungefähr 8 Fragmenten funktioniert, aber meine 20 oder so lassen es einfach auf sein Schwert fallen, gibt es etwas, was ich nicht tun könnte, könnte helfen

Bearbeiten Sie 3 Okay, indem ich etwas hinzufüge, es überprüfe, etwas hinzufüge, es überprüfe, scheint es ein Problem mit meinen Elternfragmenten zu sein, so habe ich Hauptaktivität 4 Fragmente, die jeweils einen Fragmentstatuspager halten, der jeweils 7 oder so Fragmente enthält, wenn ich hinzufüge die Methoden für den Abfrage-Listener zu den ersten 7 oder so Fragmenten im ersten Elternfragment sie alle schön arbeiten, wenn ich dann die Methoden zum nächsten Satz von 7 oder so Fragmente im zweiten Elternteil nur die zweiten Eltern Kindfragmente arbeiten, Wenn ich dann meine App kündige und es wieder öffne, funktionieren nur die ersten Elternfragmente, werde weiter nachforschen, jede Hilfe wird geschätzt, ich werde bald den Code für meine Elternfragmente hier posten.

EDIT 4 Ich füge einfach den Code hinzu, den ich für die Elternfragmente und den fragmentstatepager von meiner Hauptaktivität verwende

Also setze ich den fragmentstatepager so aus meiner Hauptaktivität wie folgt

%Vor%

und meine Elternfragmente sehen so aus

%Vor%

kämpft immer noch damit und ich kann nicht für das Leben von mir herausfinden, warum es in einer Menge von Fragmenten funktionieren würde, bis ich es zum nächsten Satz hinzufüge, es ist dasselbe mit demselben Code, es muss nur das letzte initialisieren Fragmente, die danach fragen, kann mir hier jemand helfen? Danke für jede Hilfe

    
Martin Seal 08.10.2016, 22:21
quelle

3 Antworten

1

ok ich habe es behoben, so das Problem ist, dass der Eltern fragmentstatepager fragmentA + fragmentB in den Speicher lädt, dann die Child fragmentStatePager laden dort eigene childfragmentA + childfragmentB so haben wir jetzt 2 Eltern und 4 Kinder, onPrepareOptionsMenu wird von den Kindfragmenten so aufgerufen der erste ist geladen childfragmentA (Kind von fragmentA) und dann childFragmentA (Kind von fragmentB) geladen wird und stiehlt die Suchansicht, meine 'fix' für diese ist wahrscheinlich ein wenig grob Ich bin Autodidakt und ich bin nicht sehr bewusst wie man den Speicher verwaltet oder ob es schief ist, Referenzen zu behalten usw., ich schweife ab, im Elternfragment überprüfe ich mit

, welches Fragment sichtbar ist %Vor%

und dort setze ich einen öffentlichen statischen boolean und überprüfe es in meinen Childfragmenten und es funktioniert einwandfrei für mich, wie erwähnt, das ist wahrscheinlich eine schreckliche Sache zu tun, hoffentlich kann hier jemand eine bessere Lösung geben

Prüfe, welcher Elternteil sichtbar ist

%Vor%

Überprüfen Sie, ob der Elternteil eine sichtbare Suchansicht ist

%Vor%     
Martin Seal 30.10.2016, 23:20
quelle
3

Grundsätzlich sollten Sie bei der Verwendung von Fragmenten Folgendes beachten: Verweise auf Ihre Fragmente nicht beibehalten : Erstellen Sie sie einfach und fügen Sie sie Ihrem Layout hinzu oder stellen Sie sie Ihrem ViewPager zur Verfügung Verwenden Sie dann aber andere Methoden wie FragmentManager.findFragmentBy ...

Das heißt, Ihr Code sollte lauten (lassen Sie mich mit nur zwei Fragmenten vereinfachen):

Hauptaktivität

%Vor%

sentenceMakers

Der Code, den Sie in Ihrem sentenceMakers Fragment verwenden müssen, ist dem vorherigen sehr ähnlich, aber Sie müssen den child fragmentManager verwenden (wie Sie es in Ihrem Code getan haben) und behalten Sie Ihre Fragmente nicht in einer Liste Lassen Sie das System bei Bedarf erstellen.

    
Mimmo Grottoli 21.10.2016 13:39
quelle
0

Vielleicht hilft es jemandem, der sich anstrengt, ein SearchView für mehrere Fragmente arbeiten zu lassen. Ich fand, dass onQueryTextListener an Fragment 1 (wo das SearchView erstellt wird) funktionieren würde, aber nicht auf Fragment 2,3 usw.

Fragmente 2 funktionierten, wenn onPrepareOptionsMenu überschrieben wurde und onViewCreated enthielt ein setHasOptionsMenu (true). Zum Beispiel:

%Vor%     
Luis Valverde 09.04.2018 20:48
quelle