我希望在收到推送通知后立即更新我的用户界面,类似于Facebook更新其通知计数的方式。
我取得的成就:
问题:
我在活动(UI)中并且通知继续进行,从而更改共享首选项中的值。现在我的UI没有更新,直到我转移到另一个活动并返回。 UI是在onCreate方法中创建的。
问题:如何在通知到达后立即更新我的用户界面,而不必离开或更改我当前的活动(UI)。
由于
答案 0 :(得分:2)
如果您在共享偏好中存储的值超出我建议在活动中使用OnSharedPreferenceChangeListener http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html。
答案 1 :(得分:1)
虽然您存储数据的方法有问题,但您可以register OnSharedPreferenceChangeListener
。当您的偏好更改时,这将收到回调。请注意,必须是实例变量而不是内部匿名类。
private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateNotificationCount();
}
};
您可以按如下方式注册(假设您只使用默认的共享prefs文件):
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPrefs(context);
sharedPrefs.registerOnSharedPreferenceChangeListener(preferenceChangeListener);
答案 2 :(得分:0)
您可以将您的活动注册到与您现在所在班级相同的广播,使用sendOrderedBroadcast
您可以指定接收者获得广播信息的顺序。在这里,您可以将您的活动的优先级高于其他类和
A)更新您的共享偏好设置 B)更新您的textview
然后调用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);
请记住这一点,您必须在BroadcastReceiver
方法中注册onResume
,并使用onPause
方法取消注册。
希望有所帮助