2014-03-06 18 views
0

我希望在收到推送通知後儘快更新我的用戶界面,同樣地,Facebook如何更新其通知計數。Android |在收到推送通知時不斷更新用戶界面

我所取得的成就:

  1. 我得到的通知。
  2. 我將該值保存在共享首選項中。這是不斷更新,只要我得到一個新的通知,我的價值在共享偏好更新。它更新了BroadcastReceiver的onReceive方法。
  3. 我打開活動(UI),它第一次獲取該值並正確顯示。

問題:

我在活性(UI)和通知持續到來,從而改變在所述共享的偏好值。現在我的用戶界面不會更新,直到我轉移到其他活動並返回。 UI是在onCreate方法中創建的。

問題:如何在通知到達時連續更新我的用戶界面,而不必離開或更改當前活動(UI)。

感謝

回答

1

儘管您存儲數據的方法存在疑問,但您可以使用registerOnSharedPreferenceChangeListener。當您的偏好改變時,這將會收到回撥。請注意,它必須是實例變量而不是內部匿名類。

private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() { 
    @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
     updateNotificationCount(); 
    } 
}; 

可以按如下方式註冊這個(你僅僅使用默認的共享文件首選項假設):

SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPrefs(context); 
sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener); 
+0

什麼ü建議在這種情況下存儲數據的更好的辦法? –

0

你可以你的活動,你現在所擁有的註冊到同一廣播作爲類,使用sendOrderedBroadcast您可以指定您的接收器將獲得廣播消息的順序。在這裏,你可以把你的活動具有更高的優先級比其他類和

A)更新您的共享偏好 B)更新您的TextView

,然後打電話給abortBroadcast,我會給你一個示例代碼:

發送廣播類:

Intent intent = new Intent(); 
intent.setAction("increase action"); 
intent.putExtra("new value"); 
context.sendOrderedBroadcast(intent,null); 

您的活動

首先,你必須創建一個BroadcastReceiver

private class MyReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Do your work 
     abortBroadcast(); 
    } 
} 

,然後註冊它

IntentFilter filterSync = new IntentFilter(); 
filterSync.addAction("increase action"); 
filterSync.setPriority(100); 
registerReceiver(myregister, filterSync); 

記住這一點,你必須註冊你在你的onResume方法BroadcastReceiver並在方法取消註冊。

希望它可以幫助