Podczas ostatniego Google IO odbyła się prezentacja na temat wdrażania restous client applications. Niestety była to tylko dyskusja na wysokim poziomie, bez kodu źródłowego implementacji.
Na tym diagramie na ścieżce powrotnej znajdują się różne wywołania zwrotne do innych metod.
Jak mam zadeklarować, jakie są te metody?
Rozumiem ideę wywołania zwrotnego - fragmentu kodu, który jest wywoływany po wystąpieniu określonego zdarzenia, ale nie wiem, jak go zaimplementować. Jedynym sposobem, w jaki dotychczas zaimplementowałem wywołania zwrotne, było zastępowanie różnych metod (na przykład onActivityResult).
Czuję, że mam podstawową wiedzę na temat wzorca projektowego, ale ciągle się potykam, jak radzić sobie ze ścieżką powrotną.
Odpowiedzi:
W wielu przypadkach masz interfejs i przekazujesz obiekt, który go implementuje. Na przykład okna dialogowe mają OnClickListener.
Tak jak w przypadku losowego przykładu:
Prawdopodobnie zawiodłem składnię w opcji 2. Jest wcześnie.
źródło
Kiedy coś się dzieje, odpalam zdarzenie, którego nasłuchuje moja aktywność:
// ZADEKLAROWANY W (NIESTANDARDOWYM) WIDOKU
// ZADEKLAROWANY W DZIAŁALNOŚCI
Jeśli chcesz dowiedzieć się więcej o komunikacji (callbackach) między fragmentami, zajrzyj tutaj: http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
źródło
Nie ma potrzeby, aby zdefiniować nowy interfejs, kiedy można użyć istniejącego:
android.os.Handler.Callback
. Przekaż obiekt typu Callback i wywołaj callback'shandleMessage(Message msg)
.źródło
Przykład implementacji metody wywołania zwrotnego przy użyciu interfejsu.
Zdefiniuj interfejs, NewInterface.java .
pakiet javaapplication1;
Utwórz nową klasę, NewClass.java . Wywoła metodę callback w głównej klasie.
Główna klasa, JavaApplication1.java, do implementacji interfejsu NewInterface - metoda callback (). Stworzy i wywoła obiekt NewClass. Następnie obiekt NewClass wywoła po kolei swoją metodę callback ().
źródło
aby trochę wyjaśnić odpowiedź smoka (ponieważ zajęło mi trochę czasu, zanim wymyśliłem, co z tym zrobić
Handler.Callback
):Handler
może być używany do wykonywania wywołań zwrotnych w bieżącym lub innym wątku, przekazując goMessage
s.Message
posiada dane do wykorzystania z zwrotnego. aHandler.Callback
można przekazać do konstruktora programuHandler
, aby uniknąć bezpośredniego rozszerzania programu Handler. w ten sposób, aby wykonać jakiś kod przez wywołanie zwrotne z bieżącego wątku:EDYCJA: właśnie sobie uświadomiłem, że jest lepszy sposób na uzyskanie tego samego wyniku (bez kontroli dokładnego czasu wykonania wywołania zwrotnego):
źródło
Callback
Wersja podoba mi się bardziej, ponieważ niekoniecznie masz dostęp do danych potrzebnychRunnable.run()
w momencie jej tworzeniaMożesz również użyć
LocalBroadcast
do tego celu. Oto krótka wskazówkaUtwórz odbiornik transmisji:
W ten sposób możesz to wywołać
Wyrejestruj odbiornik w onPause:
źródło