Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android |在收到推送通知时不断更新UI_Android_User Interface_Push Notification - Fatal编程技术网

Android |在收到推送通知时不断更新UI

Android |在收到推送通知时不断更新UI,android,user-interface,push-notification,Android,User Interface,Push Notification,我想在收到推送通知后立即更新我的UI,就像facebook更新通知计数一样 我所取得的成就: 我收到通知了 我将值保存在共享首选项中。这是不断更新的,一旦我收到新的通知,我在共享首选项中的值就会更新。它在BroadcastReceive的onReceive方法上更新 我打开活动(UI),它第一次获得值并正确显示 问题: 我在活动(UI)中,通知不断出现,因此更改了共享首选项中的值。现在,我的UI不会更新,直到我移动到另一个活动并返回。UI是在onCreate方法中创建的 问题:通知一到,我如何在

我想在收到推送通知后立即更新我的UI,就像facebook更新通知计数一样

我所取得的成就:

  • 我收到通知了
  • 我将值保存在共享首选项中。这是不断更新的,一旦我收到新的通知,我在共享首选项中的值就会更新。它在BroadcastReceive的onReceive方法上更新
  • 我打开活动(UI),它第一次获得值并正确显示
  • 问题:

    我在活动(UI)中,通知不断出现,因此更改了共享首选项中的值。现在,我的UI不会更新,直到我移动到另一个活动并返回。UI是在onCreate方法中创建的

    问题:通知一到,我如何在不离开或更改当前活动(UI)的情况下不断更新UI


    如果您将值存储在共享首选项中,而不是我建议在活动中使用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
    方法中注销它


    希望对您有所帮助

    在这种情况下,您认为存储数据的更好方法是什么?在这种情况下,您认为存储数据的更好方法是什么?