在Android Q中不推荐使用PreferenceManager getDefaultSharedPreferences


Answers:


212

您可以使用AndroidX支持库版本PreferenceManager,即androidx.preference.PreferenceManager和不android.preference.PreferenceManager

请记住将以下内容添加到build.gradle中。

implementation 'androidx.preference:preference:1.1.1'

50
您忘了添加依赖项:实现“ androidx.preference:preference:1.1.0”
Abhinav Saxena

1
@AbhinavSaxena当然可以。使用支持库时,这是隐式的。对该答案的早期编辑添加了仅Kotlin的ktx依赖度;我回滚了该编辑,因为它仅适用于Kotlin。
laalto

这似乎一定implementation不是dependency吗?
理查德·巴拉克拉夫

倒不是说作品之一:无法为解决依赖“:应用@ debugAndroidTest / compileClasspath”:找不到实现“androidx.preference:偏好:1.1.0。
理查德·巴勒克拉夫

我很好奇; 为什么他们不赞成使用该接口,并且优先选择获取共享首选项的其他方法,还是出于意图切换到androidx?
爱德华·福克

154

软件包preference提供了androidx PreferenceManager

Java: implementation "androidx.preference:preference:1.1.1"

科特林: implementation "androidx.preference:preference-ktx:1.1.1"


即更改android.preference.PreferenceManagerandroidx.preference.PreferenceManager


另请参见PreferenceFragmentCompat,这是PreferenceFragment要使用的当前类。


添加了到的直接链接PreferenceFragmentCompat,该链接当时还不存在...通常是在尝试更新首选项时可能遇到的下一个弃用问题。另一个链接的答案仅在有限的时间内有效。
Martin Zeitler,

我们可以在API 29之前使用API​​吗?
H.Karatsanov

3

如果您只是保存和检索键值对,则可以替换:

 prefs = PreferenceManager.getDefaultSharedPreferences(this); 

与:

 prefs = getSharedPreferences(
            "my.app.packagename_preferences", Context.MODE_PRIVATE);

确保为新的实现使用正确的文件名,否则您的用户将失去对使用getDefaultSharedPreferences(!)保存的所有内容的访问权限。以下将获取文件名getDefaultSharedPreferences所使用:

getPackageName() + "_preferences"


1

是的,已弃用。使用AndroidX首选项库可在所有设备上保持一致的行为。有关使用AndroidX首选项库的更多信息,请参见设置。

遵循此-

首选项管理器

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.