如果单独的活动中发生更改,则 onSharedPreferenceChanged 不会被触发?

2023-11-22

我已经实施了onSharedPreferenceChanged在我的主要活动中。

如果我更改主要活动中的首选项,我的事件就会触发。

如果我通过我的首选项屏幕更改首选项(PreferenceActivity)当首选项更改时,我的事件不会触发(因为它是一个单独的活动和对共享首选项的单独引用?)

有人建议我应该如何克服这种情况吗?

Thanks!

EDIT1:我尝试在我的首选项活动中添加事件处理程序,但它从未触发。在我的首选项活动的 onCreate 期间调用以下方法。当我更改值时,它永远不会打印消息(msg()是一个包装器Log.d).

private void registerChangeListener () {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);

    sp.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener () {
        public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
            msg (" ***** Shared Preference Update ***** ");
            Intent i = new Intent();
            i.putExtra("KEY", key);
            i.setAction("com.gtosoft.dash.settingschanged");

            sendBroadcast(i);

            // TODO: fire off the event
        }
    });
}

The OnSharedPreferenceChangeListener如果您使用匿名类,则会在您的情况下收集垃圾。

要解决该问题,请使用以下代码PreferenceActivity注册和取消注册更改侦听器:

public class MyActivity extends PreferenceActivity implements
    OnSharedPreferenceChangeListener {

@Override
protected void onResume() {
    super.onResume();
    // Set up a listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .registerOnSharedPreferenceChangeListener(this);
}

@Override
protected void onPause() {
    super.onPause();
    // Unregister the listener whenever a key changes
    getPreferenceScreen().getSharedPreferences()
            .unregisterOnSharedPreferenceChangeListener(this);
}

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,String key) 
{
  // do stuff
}

此外请注意,只有实际值发生变化时才会调用侦听器。再次设置相同的值将不会触发侦听器。

也可以看看SharedPreferences.onSharedPreferenceChangeListener 未被一致调用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果单独的活动中发生更改,则 onSharedPreferenceChanged 不会被触发? 的相关文章

  • 如何用Android做交互动画(翻译)

    我在 Android 中有一些 png 序列 我需要将它们的 x 和 y 位置从屏幕顶部到底部的翻译动画化 当动画发生时 我需要对象来接收单击事件 我知道这在 3 0 之前的 Android 版本中效果不太好 因为display对象的位置与
  • 如何在Android上获取当前播放曲目的路径[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想编写一个应用程序将当前播放的音乐流式传输到另一台设备 两个设备之间的连接确实有效 我还可以通过 wifi 传输一些字符串 但在获取
  • 需要对某些片段禁用 CollapsingToolbarLayout 的展开

    我有一个AppCompatActivity控制替换许多片段 这是我的布局 活动 main xml
  • 升级到 Proguard 4.8 后无法导出应用程序

    我刚刚将我的 Android SDK ADT 和 Proguard 升级到最新最好的版本 我的项目在调试模式下编译并运行良好 但是当我尝试导出它的签名版本 APK 时 我收到来自导出向导的错误Eclipse 控制台上没有任何错误日志消息 如
  • 清晰的图标 清晰的 Android 应用程序

    你好 下午好 关于如何提高图标的 png 质量 有什么想法吗 我使用了 Android 开发者页面上的套件 但我无法获得清晰的图像 我的意思是非常清晰 我是否需要以不同的方式加载此图标 而不仅仅是拖入我的布局 谢谢 我使用这个布局
  • android:ScrollView(或视差)内的RecyclerView

    我有一个片段2 次卡片浏览内有多个控件 below我有第二个卡片视图回收者视图 这有效perfect 问题是 recyclerview 启动了屏幕的最底部 并且滚动recyclerview非常small 以前使用过列表视图 这使我可以适应您
  • Android 中图像字节表示的每像素字节数

    我目前正在编写一个Android应用程序 需要在其中使用OCR 为了实现这一点 我将 Tesseract 与tesseract android tools 项目 http code google com p tesseract androi
  • 在活动启动期间优雅地处理屏幕方向变化

    我正在尝试找到一种方法来正确处理设置活动 其中活动的方向是根据启动它的意图中的数据确定的 这是一款用户可以选择关卡的游戏 其中一些是纵向的 一些是横向的 我面临的问题是setRequestedOrientation ActivityInfo
  • Android 音乐播放器应用程序:如何为服务中运行的媒体播放器设置完整的侦听器?

    我正在编写一个音乐播放器应用程序 我在服务中有 MediaPlayer 对象 问题是 我不知道如何从服务更新用户界面 例如 我想更新当前歌曲的剩余时间 但是 因为 MediaPlayer 正在服务 我无法设置 MediaPlayer 对象的
  • 如何从画布中删除路径区域(Android)

    我需要裁剪角落ImageView 不要将它们弄圆 而是擦除每个角上的三角形 似乎唯一的方法就是覆盖onDraw方法并使用从画布上删除这些区域Path 问题是我没有纯色背景 所以我需要擦除这些区域 但不要用某种颜色填充它们 我为此使用以下代码
  • 检测设备方向

    我需要检测 Android 设备方向变化 而无需手动处理传感器数据 同时保持活动方向坚持某个方向 onConfigurationChange不会起作用 因为会让我的活动不旋转 通过使用传感器数据来检测方向变化 我认为这是轮子的发明 因为 A
  • foo.setVisibility(View.GONE) 和parent.removeView(foo) 之间的区别

    如果 foo 是一个视图 那么有什么区别foo setVisibility View GONE and fooParent removeView foo 我对两个语句之前和之后视图的内存消耗特别感兴趣 可见性设置为 GONE 的视图是否会消
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • Android:从 PhoneGap 应用打开 Play 商店链接

    我想从我的phonegap 3 4 应用程序打开一个指向Google Play 商店的链接 呼唤market details id com google android apps maps导致 ActivityNotFoundExcepti
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • 带有工具提示的搜索栏 android

    Hi All 我正在尝试使用工具提示自定义 android 搜索栏 如给定的图像 有没有办法在搜索栏中添加带有拇指的文本视图 或任何其他想法 Thanks 我们可以通过拇指的界限来做到这一点 并在seekbar的progressChange
  • 如何以编程方式检测android中可用的底部软导航栏?

    我试图通过 android 程序确定软导航栏 我没有找到直接的方法来确定 有没有办法找到导航栏的可用性 软导航栏图像在这里 以下方法对我有用并在许多设备上进行了测试 public boolean hasNavBar Resources re
  • FCM 主题是否适合更多用户?

    我对使用主题消息有点困惑 我的场景是根据通知触发一些作业 请帮助我更多地了解这一点 如果我们正在处理大量用户 则可以使用 FCM 主题向用户发送通知 我们可以只使用数据消息和主题消息吗 使用主题发送的消息是否保证送达 我在 FCM 文档中看
  • FCM(Firebase Cloud Messaging)如何发送到所有手机?

    我创建了一个小型应用程序 能够从 FCM 控制台接收推送通知 我现在想做的是向所有使用 API 安装应用程序的 Android 手机发送推送通知 这就是我完全迷失的地方 有没有办法在不收集所有注册ID的情况下将其发送到所有手机 这是否仅适用

随机推荐

  • R:使用 mongolite 更新 mongodb 中的条目

    我有一个mongo包含我传递给某些人的信息的数据库R用于分析的脚本 我目前正在使用mongolite传递信息的包mongo to R 我在每个 mongo 条目中有一个名为checkedByR 这是一个二进制文件 指示该条目是否已被分析R已
  • Hibernate 标准:左外连接,对两个表都有限制

    我正在执行 LEFT OUTER JOIN 但我只能对第一个表应用限制 有没有办法也适用于第二张桌子 这是我的代码 Criteria criteria this crudService initializeCriteria Applican
  • 带大括号的 std::vector init 调用复制构造函数两次

    为什么当我用大括号初始化 std vector 时 std vector
  • Android ExpandableListView 带按钮的父级

    我正在努力实现这样的目标 可扩展列表由某些类别的名称组成 当单击父级时 它会显示该类别中所有子级的列表 现在 假设我想动态地将一个子项添加到任何类别中 我怎么做 我是否要为列表中的每个家长保留一个按钮 单击该按钮将在其下添加一个新孩子 但环
  • 这是在 C++11 中将一个 std::vector 的内容移动到另一个 std::vector 的末尾的最有效方法吗?

    我在想vector insert and std copy 命令需要额外的分配 然而 如果我push back 一个新创建的元素然后swap 我认为只要包含的类型不使用默认构造函数分配 这就会减少任何分配 我的问题实际上是专门针对std v
  • ILMerge + 本地化资源程序集

    我正在使用 ILMerge 从包含 1 个 exe 和 2 个资源 dll 的项目中创建单个程序集应用程序 bin 调试 test exe bin Debug nl BE test resources dll bin Debug fr FR
  • 如何用文档来修饰 Objective C 方法?

    当我输入 Cocoa 对象并调用该对象上的选择器时 有时我可以看到有关该方法的 文档 或 帮助 信息 例如 当我输入 NSArray alloc 我看到两个帮助提示 一个为NSArray 还有一个用于alloc 当我键入代码时 这两个内容都
  • 全局 jquery 函数

    我必须在最初加载的js文件中编写全局函数 我想在上面编写函数 以便可以从所有页面访问它 我是 jquery 新手 我想知道如何在js文件中编写函数并从其他页面调用它 您可以通过执行以下操作添加自己的 jQuery 函数 fn MyFunct
  • firebase-tools“-bash:firebase:找不到命令”

    很高兴 Firebase 的托管现已结束测试版 尝试使用 firebase tools 包 我已成功安装它 npm install g firebase tools 尝试运行任何工具都会失败 bash firebase command no
  • 在 R Shiny 应用程序中从反应性数据()调用变量

    我想在反应式表达式中调用某个变量 像这样的东西 server R library raster shinyServer function input output data lt reactive inFile lt input test
  • 如何用javapoet生成符号Class

    我想生成一个这样的字段 public static Map
  • 如何重建GNU Arm嵌入式工具链的newlib和newlib-nano

    我下载了工具链 gcc arm none eabi 6 2017 q2 update win32 sha1 exe Windows 来自https developer arm com open source gnu toolchain gn
  • javascript include 开头的双斜线

    我一直在查看 html5 样板并注意到 jquery include url 以双斜杠开头 网址是 ajax googleapis com ajax libs jquery 1 5 1 jquery min js 为什么 http 丢失了
  • 如何获取Web配置位置元素?

    如何获取Web配置位置元素 ConfigurationManager GetSection appSettings returns Okay ConfigurationManager GetSection location return n
  • Pyinstaller 语法错误:异步函数内的“yield”(Python 3.5.1)

    我正在尝试使用pyinstaller创建单个可执行文件以分发给未安装 Python 的用户 该脚本非常简单 只是为了测试水 我仅使用几行代码作为 豚鼠 The Hello World程序 无需导入 转换良好 我的豚鼠程序 导入matplot
  • matplotlib 图中交互式选择系列

    我一直在寻找一种方法 能够在创建绘图后选择绘图上可见的系列 我需要这个 因为我经常有很多系列的情节 它们太多了 无法同时绘制 我需要快速交互地选择哪些系列可见 理想情况下 会有一个窗口 其中包含绘图和复选框中的系列列表 其中带有选中复选框的
  • 共享 Git 存储库中的 .editorconfig

    我已经准备好了我的 editorconfig我想在多个 Git 存储库上使用的文件 每个存储库都包含一个 Visual Studio 解决方案 C 我的第一个想法是把 editorconfig文件放在自己的存储库中 然后将其作为子模块包含在
  • Rust 中的泛型部分专业化

    让我们看一些数学向量的例子 根据空间维度 它由不同数量的组件组成 对于 2D x y 对于 3D x y z 对于 4D x y z w 通用 N 个组件 在C 中我可以使用SFINAE概念来实现它 template
  • 当我使用 Md5 哈希文件时,哈希了什么?

    仅仅是文件内容被散列吗 有没有办法将文件名和 或元数据 例如创建日期 包含到哈希过程中 一般来说 所有文件哈希器仅加密文件的二进制内容 您可以通过以下过程来证明这一点 将 md5 算法应用于文件 将此文件复制到其他目录并更改其名称 对副本应
  • 如果单独的活动中发生更改,则 onSharedPreferenceChanged 不会被触发?

    我已经实施了onSharedPreferenceChanged在我的主要活动中 如果我更改主要活动中的首选项 我的事件就会触发 如果我通过我的首选项屏幕更改首选项 PreferenceActivity 当首选项更改时 我的事件不会触发 因为