You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GlanceAppWidget UI渲染更新异常问题求助

GlanceAppWidget UI渲染更新异常问题求助

大家好,我最近在开发一款带GlanceAppWidget的Android应用,用来展示笔记信息。我的需求很明确:让widget显示当前选中的笔记ID,点击按钮后更新这个ID,并且让widget的UI同步刷新显示新的ID。

但现在遇到了问题——点击按钮后,widget的UI完全没变化,控制台打印的noteId还是旧值。我猜是更新ID的逻辑和widget状态刷新的衔接出了问题,先贴出我的部分代码,麻烦各位大佬帮忙看看:

NotesWidget 类代码

class NotesWidget : GlanceAppWidget() {
    override val stateDefinition = PreferencesGlanceStateDefinition
 
    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent {
            GlanceTheme {
                val prefs = currentState<Preferences>()
                val noteId = prefs[intPreferencesKey("widgetNoteId")]
 
                Button(
                    text = noteId.toString(),
                    onClick = actionStartActivity<NotesWidgetActivity>()
                )
                println("Selected Note id $noteId")
            }
        }
    }
}

NotesWidgetActivity 类(部分代码)

class NotesWidgetActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
        // 这里原本打算处理笔记ID更新逻辑,比如选择新笔记后更新SharedPreferences里的值
        // 但目前就算更新了prefs,widget的UI也没跟着变化
        ...
    }
}

我现在有几个疑问:

  • 是不是更新SharedPreferences后,没有正确通知GlanceWidget刷新状态?
  • 触发GlanceWidget重新渲染UI的正确方式是什么?
  • 我的stateDefinition使用有没有问题?

希望有经验的朋友能帮忙排查下问题,或者给我指个调整方向,让点击按钮更新ID后,widget的UI能同步显示新的ID。

备注:内容来源于stack exchange,提问作者Kin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 09:15:28