2012-12-19 13 views
7

Pracuję nad aplikacją, która używa GCMIntentService dla powiadomień push. Dlatego chcę odświeżyć Dane jednego ListView, które znajduje się na karcie mojego TabActivity. Czy można to zrobić z poziomu GCMIntentService po otrzymaniu i GCMIntentMessage?Wywołanie onResume() lub onCreate() z GCMIntentService

Na przykład

SecondTabActivity.callOnResume(); //or something like this 

lub

SecondTabActivity.callOnCreate(); // or something like this 

muszę zrobić to bez użycia startActivity(intent); bo jeśli zrobię SecondTabActivity wydostanie się z mojej TabHost i zaczyna się jak nowa Activity. Funkcja odświeżania ListView znajduje się pod onCreate() i onResume() w SecondTabActivity, dlatego właśnie chcę do nich zadzwonić. Jeśli istnieje jakakolwiek inna droga obok tej, proszę odnieść się do niej. Dzięki

Odpowiedz

8

Dobrym sposobem jest wykorzystanie zamiarów transmisji.

  1. w twojej TabActivity za onCreate, użyj metody Context.registerReceiver zarejestrować odbiornik do transmisji zamiarem nazwie coś jak „MyGCMMessageReceived”.

  2. W tym odbiorniku transmisji, wywołaj metodę, która odświeża listę.

    this.registerReceiver(new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
         // INSERT CODE TO REFRESH LIST VIEW 
        } 
    }, new IntentFilter("MyGCMMessageReceived")); 
    
  3. Bądź metoda onMessage Twojego GCMIntentService emitują o zamiarze nazwie "MyGCMMessageReceived".

    Intent intent = new Intent("MyGCMMessageReceived"); 
        this.sendBroadcast(intent); 
    
+0

To wydaje się miłą odpowiedź, ale nie mogę pełni zrozumieć, co chcesz przez to powiedzieć. Czy możesz dać mi jakiś wyładowany kod? – Naskov

+1

Oczywiście, dodano fragmenty kodu. – tom

+0

@Naskov Czy ta praca była dla Ciebie? – tom

1

Należy użyć LocalBroadcastManager w służbie działalności Communications.

W swojej IntentService wysyłasz nowe informacje przez transmisję lokalną, a w swojej TabActivity musisz zarejestrować odbiornik. W metodzie onReceive musisz odświeżyć swój widok.

Tu masz prosty przykład: LocalBroadcastManager example

Powiązane problemy