[英]Android | Continuously update UI on receiving a push notification
我想在收到推送通知后立即更新UI,类似地,Facebook如何更新其通知计数。
我所取得的成就:
问题:
我处于活动(UI)中,并且通知不断出现,因此更改了共享首选项中的值。 现在,直到我移至另一个活动并返回之前,我的UI才会更新。 UI是在onCreate方法中创建的。
问题:如何在通知到达后立即连续更新UI,而又不离开或更改当前活动(UI)。
谢谢
如果您在共享首选项中存储值,则建议不要在活动中使用OnSharedPreferenceChangeListener http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html 。
当您存储数据的方法存在疑问时,您可以注册 OnSharedPreferenceChangeListener
。 更改首选项后,这将收到回调。 请注意,它必须是一个实例变量,而不是内部匿名类。
private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateNotificationCount();
}
};
您可以按以下方式进行注册(假设您只是使用默认的共享prefs文件):
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPrefs(context);
sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
您可以将您的活动注册为与当前班级相同的广播,使用sendOrderedBroadcast
可以指定接收者获取广播消息的顺序。 在这里,您可以将“活动”放在比其他班级更高的优先级上,
A)更新您的共享首选项B)更新您的文本视图
然后调用abortBroadcast,我将为您提供示例代码:
发送广播的类:
Intent intent = new Intent();
intent.setAction("increase action");
intent.putExtra("new value");
context.sendOrderedBroadcast(intent,null);
您的活动
首先,您必须创建一个广播接收器
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
,而在onPause
方法中取消注册。
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.