Jak mogę przekazać dane między fragmentem a jego działaniem w kontenerze? Czy jest coś podobnego do przekazywania danych między działaniami poprzez intencje?
Czytałem to, ale niewiele to pomogło:
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Odpowiedzi:
W swoim fragmencie możesz zadzwonić
getActivity()
.Dzięki temu uzyskasz dostęp do aktywności, która utworzyła fragment. Stamtąd możesz oczywiście wywołać dowolne metody akcesorów, które są w działaniu.
np. dla metody wywoływanej
getResult()
w Twoim działaniu:źródło
Spróbuj użyć interfejsów.
Każdy fragment, który powinien przekazywać dane z powrotem do swojego działania zawierającego, powinien deklarować interfejs do obsługi i przekazywania danych. Następnie upewnij się, że działanie zawierające implementuje te interfejsy. Na przykład:
JAWA
W swoim fragmencie zadeklaruj interfejs ...
Następnie podłącz implementację interfejsu klasy zawierającej do fragmentu w metodzie onAttach, tak jak poniżej:
W swoim fragmencie, gdy musisz obsłużyć przekazywanie danych, po prostu wywołaj go w obiekcie dataPasser:
Wreszcie, w Twojej działalności zawierającej, która implementuje
OnDataPass
...KOTLIN
Krok 1. Utwórz interfejs
Krok 2. Następnie podłącz implementację interfejsu zawierającej klasę do fragmentu w metodzie onAttach (YourFragment), tak jak poniżej:
Krok 3. W obrębie twojego fragmentu, kiedy musisz obsłużyć przekazywanie danych, po prostu wywołaj go w obiekcie dataPasser:
Krok 4. Wreszcie, w swojej aktywności implementuje OnDataPass
źródło
ActionBar.TabListener
i musiałem dodać dodatkowy interfejs.Najłatwiejsze podejście, ale nie zalecane
Możesz uzyskać dostęp do danych aktywności z fragmentu:
Czynność:
Fragment:
źródło
MyActivity
źródło
Przekazywanie danych między fragmentem a jego działaniem w kontenerze
Czynność:
Fragment:
Czytanie wartości we fragmencie
źródło
Nie wiem, czy to najlepszy sposób, czy nie Bu Szukałem w Google od dłuższego czasu znajdując, jak mogę przekazać pakiet z fragmentu do jego aktywności w kontenerze, ale zamiast tego znalazłem tylko wysyłanie danych z działania do fragmentu (co było dla mnie trochę zagmatwane, ponieważ jestem nowicjuszem).
później spróbowałem czegoś własnego, co działało dla mnie dokładnie tak, jak chciałem. więc opublikuję to tutaj, jeśli ktoś taki jak ja szuka tego samego.
// Przekazywanie danych z fragmentu.
// Pobieranie danych z pakietu z jego aktywności w kontenerze.
źródło
Interfejs to jedno z najlepszych rozwiązań:
Interfejs kleju:
Moja aktywność:
MyFragment:
źródło
Użyłem AppCompatActivity, który implementuje nasłuchiwanie dat. Fragmenty były konieczne, ponieważ musiałem zakodować selektor zakresu dat. Potrzebowałem również kontenera, aby otrzymać wybrane daty, aby przywrócić je do aktywności nadrzędnej.
W przypadku działania kontenera jest to deklaracja klasy:
I interfejsy dla wywołań zwrotnych:
Wywołania zwrotne są ciągami, ponieważ daty są parametrami w wyborze zapytania.
Kod fragmentów (na podstawie początkowego fragmentu daty):
}
Aby skomponować kontener + fragmenty, użyłem ViewPager (AppCompat) z niestandardową klasą, która rozszerza FragmentPagerAdapter. Brak okien dialogowych.
źródło
Po prostu możesz skorzystać z EventBus, jest to łatwe i działa świetnie
EventBus w 3 krokach
Zdefiniuj wydarzenia:
public static class MessageEvent { /* Additional fields if needed */ }
Przygotuj subskrybentów: zadeklaruj i dodaj adnotacje do swojej metody subskrypcji, opcjonalnie określ tryb wątku:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Zarejestruj i wyrejestruj swojego subskrybenta. Na przykład na Androidzie działania i fragmenty powinny zwykle rejestrować się zgodnie z ich cyklem życia:
Opublikuj wydarzenia:
EventBus.getDefault().post(new MessageEvent());
źródło
Wiem, że to może być późno. Ale ja też zawsze byłem zagubiony w tej kwestii. Udostępniam ten link ... ponieważ jest to prawdopodobnie najlepsze wyjaśnienie tego problemu, jakie kiedykolwiek znalazłem w Internecie. To rozwiązuje fragment do działania i fragment do fragmentu !
Naprawdę dobrze rozwiązany i wyjaśniony
źródło
To działa dla mnie ...
w Aktywności dodaj tę metodę
i we fragmencie dodaj tę linię
źródło
źródło
Innym prostym sposobem na pobranie danych, przekazanych z innej aktywności, we fragmencie w działaniu kontenera: na przykład:
W swoim Activity_A tworzysz intencję, taką jak wysyłanie danych (tutaj String) do innego działania:
w Twoim fragmencie zawartym w Twoim Activity_B:
źródło
getBaseContext()
daje mi następujący błąd:The method getBaseContext() is undefined for the type new View.OnClickListener(){}