android - 关于 Android PreferenceActivity 的一堆问题

标签 android broadcastreceiver android-preferences preferenceactivity

我正在使用 PreferenceActivity 设置一些关于我拥有的另一个 BroadcastReciever 的首选项。

虽然使用 XML 文件制作首选项 GUI 的骨架非常简单,但我无法找到如何使用这些首选项实际执行某些操作的方法。特别是:

  1. 如何注册我的 BroadcastReciever 以收听我的偏好变化? 看起来广播接收器的上下文与 Activity 不同,所以我没有注册到正确的 SharedPreferences 因为我没有拦截这些更改。

  2. 如何根据偏好更改在我的 PreferenceActivity 中执行操作?我想我不需要将 PreferenceActivity 注册为首选项的监听器,所以必须有更简单的方法。

  3. 如何根据首选项的变化更改 PreferenceActivity 的 UI?例如,将首选项的“摘要”属性设置为用户选择的值?

  4. 我如何启用或禁用某些依赖于其他首选项(如 CheckBoxPreference)的首选项?因此用户只有先启用该功能才能编辑这些首选项。

我查看了所有文档,但除了从 XML 添加首选项之外,没有使用 PreferenceActivity 的示例。

我觉得我在这里遗漏了一些巨大的东西,因为它看起来很简单,但我还是想不通......

请尝试回答我的任何问题。

顺便说一句: 我正在为 Android 1.6 开发,所以所有新的 PreferenceFragment 都不能使用。

最佳答案

How do i register my BroadcastReciever to listen to changes in my preferences?

如果 BroadcastReceiver 已在 list 中注册,则您不会监听首选项中的更改,因为 BroadcastReceiver 只会存在几毫秒。只需在 onReceive() 期间读取最新值。

如果 BroadcastReceiver 被其他调用 registerReceiver() 的组件注册,该组件可以使用 SharedPreferences 注册一个 OnSharedPreferenceChangeListener 通过 PreferenceManagergetDefaultSharedPreferences() 检索。

Its look like that the context of the broadcast reciever is not the same as the activity so i'm not registering to the right SharedPreferences because i dont intercept those changes.

这句话没有意义。

How do i act in my PreferenceActivity upon changes in the preferences?

使用通过 PreferenceManagergetDefaultSharedPreferences() 检索到的 SharedPreferences 注册一个 OnSharedPreferenceChangeListener

How do i change the UI of the PreferenceActivity appropriate to the changes in the preferences?

通常,您不需要。欢迎您使用通过 PreferenceManagergetDefaultSharedPreferences() 检索到的 SharedPreferences 注册一个 OnSharedPreferenceChangeListener。从那里,您可以通过 findPreference() 从您的 PreferenceActivity 获取 Preference 并进行调整以适应。

How do i enable or disable some preferences that depends on another preference (like CheckBoxPreference)? so the user could edit those preferences only if he enabled the feature first.

根据需要将 android:dependency 添加到您的首选项 XML。

关于android - 关于 Android PreferenceActivity 的一堆问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5930507/

相关文章:

java - 双 Pane 首选项屏幕的问题

java - Windows 版 Android Studio 安装失败

java - 尝试使用 HTTPPost 和 HTTPGet 在 Android 中创建登录应用程序,但登录已停止

android - 再次调用startService时如何清除alarmManager set()

Android 12 BroadcastReceiver onReceive intent.getExtras 始终为 null

android - 声明 CheckBoxPreference 时无法成功转换

android - 使用sed操作xml文件

java - Android 应用程序没有启动图标

c# - 将数据从服务发送到其他 Activity 的 BroadcastReceiver (Xamarin Android)

android - 使用 androidx.preference.PreferenceScreen 和 PreferenceScreen 的区别