Android - 事件队列 - 在首选项设置后执行

发布于 2025-01-03 02:59:15 字数 337 浏览 1 评论 0原文

我正在重新安排属性更改后的警报。我需要读取各种变量。问题是,当我从 OnPreferenceChangeListener 运行该函数时,该函数会看到旧的首选项值。

我想做一些我从 AWT/Swing 开发中知道的事情:将命令添加到事件队列,以便在处理 UI 事件后执行它,这也意味着在完成首选项更改操作后。问题是...我在 Android 中没有发现任何与 EventQueue 类似的东西。我发现只有 runOnUiThread 操作,这不是我需要的,因为根据规范,如果我们已经在 UI 线程中,该命令将立即执行。

那么,你能帮我,我需要使用什么吗?可能是我搜错关键词了……

I'm rescheduling alerts after property change. I need to read various variables. The problem is, when I run the function from OnPreferenceChangeListener, this function sees old value of preference.

I've wanted to do something I know from AWT/Swing development: add command to event queue, so that it will be executed after processed UI events, it means also after finishing preference change operation. The problem is... I've found nothing similar to EventQueue in Android. I've found only runOnUiThread operation, which is not what I need, because according to specification the command will be immediately executed, if we already are in UI thread.

So, could you please help me, what I need to use? Maybe I've searched for wrong keyword....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧人 2025-01-10 02:59:15

就我而言,我使用了错误的 OnPreferenceChangeListener 在首选项更改阶段使用,在单个首选项上注册,并且应该用于首选项值验证。

我需要的是注册在首选项更改后将调用的侦听器。此任务通过 OnSharedPreferenceChangeListener 完成,将在更改任何首选项并且更改对应用程序可见后调用:

    PreferenceManager.getDefaultSharedPreferences(this)
        .registerOnSharedPreferenceChangeListener(
            new OnSharedPreferenceChangeListener() {

        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            if (MYKEY1.equals(key) 
                    || MYKEY2.equals(key)) {
                 doSomething();
            }
        }
    });

In my case, I was using wrong the OnPreferenceChangeListener is used during preference change phase, is registered on single preference and should be used for preference value validation.

This what I needed was to register the listener that will be called after the preference is already changed. This task is done with OnSharedPreferenceChangeListener, that will be called after any preference is changed and the change is already visible to the app:

    PreferenceManager.getDefaultSharedPreferences(this)
        .registerOnSharedPreferenceChangeListener(
            new OnSharedPreferenceChangeListener() {

        public void onSharedPreferenceChanged(
                SharedPreferences sharedPreferences, String key) {
            if (MYKEY1.equals(key) 
                    || MYKEY2.equals(key)) {
                 doSomething();
            }
        }
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文