Próbuję wywołać metodę w mojej działalności z fragmentu. Chcę, aby fragment podał dane metody i uzyskał dane po zwróceniu metody. Chcę osiągnąć podobne do wywołania metody statycznej, ale bez użycia metody statycznej, ponieważ stwarza to problemy w działaniu.
Nowość we fragmentach, dlatego potrzebuję łatwego i pedagogicznego wyjaśnienia!
Dzięki!
android
android-fragments
Joakim Ericsson
źródło
źródło
Prawdopodobnie powinieneś spróbować oddzielić fragment od aktywności na wypadek, gdybyś chciał użyć go gdzie indziej. Możesz to zrobić, tworząc interfejs, który implementuje Twoje działanie.
Zdefiniowałbyś więc interfejs w następujący sposób:
Załóżmy na przykład, że chcesz nadać działaniu ciąg i zwrócić mu liczbę całkowitą:
Można to zdefiniować we fragmencie lub oddzielnym pliku.
Wtedy twoje działanie zaimplementuje interfejs.
Następnie w swoim fragmencie miałbyś zmienną MyStringListener i ustawiłeś detektor we fragmencie na metodzie AtAttach (Activity activity).
edycja (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
Pierwsza odpowiedź zdecydowanie działa, ale łączy twój aktualny fragment z działalnością gospodarza. Dobrą praktyką jest utrzymywanie fragmentu niezwiązanego z działalnością gospodarza na wypadek, gdybyś chciał użyć go przy innej aktywności.
źródło
Dla programistów Kotlin
Dla programistów Java
źródło
Zaktualizuj po tym, jak lepiej zrozumiem, jak działają fragmenty. Każdy fragment należy do działania rodzica. Więc po prostu użyj:
Z fragmentu. To lepsza odpowiedź, ponieważ unikasz zbędnych rzutów. Jeśli nie możesz uniknąć rzutów za pomocą tego rozwiązania, skorzystaj z poniższego.
============
musicie rzucić na zewnętrzną aktywność
utworzenie nowej instancji będzie dezorientować ramkę Androida i nie będzie w stanie jej rozpoznać. Zobacz też :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
źródło
Chociaż całkowicie podoba mi się odpowiedź Marco, myślę, że to sprawiedliwe, aby wskazać, że możesz również użyć frameworku opartego na publikowaniu / subskrybowaniu, aby osiągnąć ten sam wynik, na przykład jeśli wybierzesz magistralę zdarzeń, możesz wykonać następujące czynności
fragment:
Czynność:
źródło
W kotlin możesz wywołać metodę aktywności z fragmentu jak poniżej:
źródło
Aby uzyskać dostęp do funkcji zadeklarowanej w twojej aktywności poprzez swój fragment, użyj interfejsu, jak pokazano w odpowiedzi marco.
Aby uzyskać dostęp do funkcji zadeklarowanej we fragmencie za pośrednictwem aktywności, możesz jej użyć, jeśli nie masz tagu ani identyfikatora
To jest ViewpagerAdapterClass
Ta odpowiedź jest dla noobów takich jak ja. Miłego dnia.
źródło
To klasa From Fragment ...
Ten kod z klasy aktywności ...
źródło
Próbowałem ze wszystkimi metodami pokazanymi w tym wątku i żadna nie działała dla mnie, spróbuj tego. To zadziałało dla mnie.
źródło
Szukałem najlepszego sposobu, aby to zrobić, ponieważ nie każda metoda, którą chcemy wywołać, znajduje się we fragmencie z tym samym rodzicem aktywności.
W twoim fragmencie
W twojej działalności
źródło
((YourActivityName)getActivity()).functionName();
Przykład:
((SessionActivity)getActivity()).changeFragment();
Uwaga: nazwa klasy powinna być publiczna
źródło
Gdzie
your_activity
jest nazwa twojej aktywności imethod_name()
nazwa metody, którą chcesz wywołać.źródło
Dla Kotlina wypróbuj to
źródło