我正在尝试使用 Kotlin 在 Android Studio 中创建我的第一个 Android 应用程序。在学习如何使用 Jetpack Compose 的同时成功创建了几个活动后,我现在要添加一个设置屏幕,用户可以在其中切换几个选项。
我想保留这些设置,以便在应用程序关闭并重新启动后恢复它们。
SharedPreferences
类型是正确的选择。但 SharedPreferences
已被弃用,取而代之的是“DataStore”。
DataStore
它出现了。要使用它,我必须向 Gradle 文件添加一些依赖项,然后我可以开始使用
PreferencesDataStore
类型 - 但是等等,这也已被弃用。文档说我应该使用“AndroidX首选项库”。
根据 2024 年底已弃用或未弃用且稳定的内容,保留应用程序设置的默认方式是什么?
preferencesDataStore
(注意第一个字符的小写)。这不是一个类型,它是一个返回 DataStore 的函数。
示例数据存储实现可能如下所示:
private val Context.dataStore by preferencesDataStore("settings")
private val Keys = object {
val EXAMPLE_SETTING_1 = intPreferencesKey("example_counter")
}
@Singleton
class SettingsDataStoreManager @Inject constructor(
@ApplicationContext context: Context,
) {
private val dataStore = context.dataStore
val exampleSetting1: Flow<Int> = dataStore.data
.map { preferences ->
preferences[Keys.EXAMPLE_SETTING_1] ?: 0
}
suspend fun setExampleSetting1(value: Int) {
dataStore.edit { settings ->
settings[Keys.EXAMPLE_SETTING_1] = value
}
}
}
这表示可以包含任意数量设置的单个数据存储(当前仅包含单个设置,exampleSetting1
)。将所有这些内容放入专用的 Kotlin 文件中。如果您想为同一应用程序创建另一个数据存储,请创建一个新文件。使用另一个类名和另一个参数
preferencesDataStore
。
exampleSetting1
流,并将其作为 StateFlow(通过使用
stateIn
)公开给可组合项,在可组合项中通过调用
collectAsStateWithLifecycle
将其转换为 Compose State 对象。当数据存储中的值发生更改时,该状态将自动更新(然后触发重组)。因此,您的 UI 将始终自动更新。