2012-12-19 61 views
7

我正在開發使用GCMIntentService推送通知的應用程序。所以我想刷新一個ListView的數據,該數據位於我的TabActivity的選項卡中。那麼我可以從GCMIntentService這麼做,當我收到和GCMIntentMessage從GCMIntentService調用onResume()或onCreate()

例如

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

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

我需要做到這一點,而無需使用startActivity(intent);因爲如果我這樣做SecondTabActivity是從我的TabHost走出,它的開始像新的Activity。在SecondTabActivity中刷新ListView的功能位於onCreate()和onResume(),所以這就是我爲什麼要調用它們的原因。如果除此之外還有其他方法,請參閱它。謝謝

回答

8

一個好方法是使用廣播意圖。

  1. 在你TabActivity的onCreate,使用Context.registerReceiver方法註冊名爲類似意圖的廣播接收機「MyGCMMessageReceived。」

  2. 在該廣播接收器中,調用刷新列表的方法。

    this.registerReceiver(new BroadcastReceiver() { 
        @Override 
        public void onReceive(Context context, Intent intent) { 
         // INSERT CODE TO REFRESH LIST VIEW 
        } 
    }, new IntentFilter("MyGCMMessageReceived")); 
    
  3. 讓您GCMIntentService的onMessage方法播出名爲 「MyGCMMessageReceived」 的意圖。

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

這似乎是不錯的答案,但我不能完全理解你有什麼想說的。你能給我一些sniped代碼嗎? – Naskov

+1

當然,添加了代碼片段。 – tom

+0

@Naskov爲你工作嗎? – tom

1

你應該在服務使用LocalBroadcastManager到活動通信。

在您的IntentService中,您通過本地廣播發送新信息,並且在您的TabActivity中您必須註冊一個接收器。在onReceive方法中,你必須刷新你的視圖。

這裏有一個簡單的例子:LocalBroadcastManager example

相關問題