Android |在收到推送通知时不断更新UI
我想在收到推送通知后立即更新我的UI,就像facebook更新通知计数一样 我所取得的成就:Android |在收到推送通知时不断更新UI,android,user-interface,push-notification,Android,User Interface,Push Notification,我想在收到推送通知后立即更新我的UI,就像facebook更新通知计数一样 我所取得的成就: 我收到通知了 我将值保存在共享首选项中。这是不断更新的,一旦我收到新的通知,我在共享首选项中的值就会更新。它在BroadcastReceive的onReceive方法上更新 我打开活动(UI),它第一次获得值并正确显示 问题: 我在活动(UI)中,通知不断出现,因此更改了共享首选项中的值。现在,我的UI不会更新,直到我移动到另一个活动并返回。UI是在onCreate方法中创建的 问题:通知一到,我如何在
如果您将值存储在共享首选项中,而不是我建议在活动中使用OnSharedPreferenceChangeListener,则表示感谢。如果您将值存储在共享首选项中,而不是我建议在活动中使用OnSharedPreferenceChangeListener。虽然您存储数据的方法有问题,您可以在共享首选项更改侦听器上创建
。当您的首选项更改时,将收到一个回调。请注意,它必须是实例变量,而不是内部匿名类
private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateNotificationCount();
}
};
您可以按如下方式注册此文件(假设您只使用默认的共享prefs文件):
虽然存储数据的方法有问题,但您可以在共享首选项ChangeListener上使用。当您的首选项更改时,将收到一个回调。请注意,它必须是实例变量,而不是内部匿名类
private OnSharedPreferenceChangeListener preferenceChangeListener = new OnSharedPreferenceChangeListener() {
@Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
updateNotificationCount();
}
};
您可以按如下方式注册此文件(假设您只使用默认的共享prefs文件):
您可以使用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
方法中注销它
希望对您有所帮助您可以使用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
方法中注销它
希望对您有所帮助在这种情况下,您认为存储数据的更好方法是什么?在这种情况下,您认为存储数据的更好方法是什么?