Android Glance Widget:重新配置时如何获取初始配置数据?
解决Glance Beta-01版本重新配置Widget时获取原始配置数据的问题
在Glance beta-01版本中,rememberAppWidgetConfigurationState的getCurrentState方法逻辑发生了调整,无法直接获取已创建Widget的原始配置数据。你可以通过GlanceAppWidgetManager手动查询目标Widget的已有配置,实现重新配置界面的表单自动填充。
具体修改方案
- 通过上下文获取
GlanceAppWidgetManager实例,用于查询指定Widget的状态存储 - 利用
glanceId定位目标Widget,读取其已保存的Preferences配置 - 将读取到的原始数据赋值给表单状态变量,完成自动填充
修改后的代码示例
@Composable private fun ConfigurationScreen() { val context = LocalContext.current val scope = rememberCoroutineScope() // 确保selectedData是可观察的可变状态,用于绑定表单 var selectedData by remember { mutableStateOf("") } val configurationState = rememberAppWidgetConfigurationState(RowWidget) val glanceManager = remember { GlanceAppWidgetManager(context) } fun updatePref() { configurationState.updateCurrentState<Preferences> { it.toMutablePreferences().apply { set(WidgetReceiver.data, selectedData) }.toPreferences() } } if (configurationState.glanceId == null) { configurationState.discardConfiguration() return } // 自动填充原始配置数据 LaunchedEffect(configurationState.glanceId) { // 通过GlanceAppWidgetManager获取目标Widget的状态容器 val existingState = glanceManager.getGlanceState(configurationState.glanceId) // 读取已保存的Preferences数据 val currentData = existingState?.get<Preferences>(GlanceAppWidget.DEFAULT_PREFERENCES_KEY) ?.get(WidgetReceiver.data) if (currentData != null) { selectedData = currentData updatePref() } } AppWidgetConfigurationScaffold(/* 你的脚手架配置参数 */) { // 此处放置你的表单UI,使用selectedData自动填充字段 } }
关键说明
GlanceAppWidget.DEFAULT_PREFERENCES_KEY是Glance默认存储配置数据的key,需通过它从Widget状态容器中取出Preferences对象- 以
configurationState.glanceId作为LaunchedEffect的依赖项,确保glanceId确定后再执行数据查询,避免空指针 - 确认
WidgetReceiver.data的类型与保存时一致,避免类型转换异常
内容的提问来源于stack exchange,提问作者Jscti
相关产品推荐
相关产品推荐

