【发布时间】:2022-01-21 01:31:09
【问题描述】:
我有一个包含用户创建的所有小部件的表格。我想使用相应的表格条目自定义各个小部件,并在与小部件交互时更新相应的表格条目。
| uid | AppWidgetId | Title |
|---|---|---|
| 0 | 23 | First widget |
| 1 | 165 | Second widget |
(1) 当用户点击小部件时,我只想更新被点击的小部件的条目。在非 Glance 世界中,我通过向每个小部件添加一个 onClickListener 来做到这一点,看起来有点像这样:
val widgetView = RemoteViews(context.packageName, R.layout.widget_layout)
val widgetPendingIntent = ...
widgetView.setOnClickPendingIntent(R.id.appwidget_text, widgetPendingIntent)
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.updateAppWidget(appWidgetId, widgetView)
在 Glance 小部件中,我假设我需要像这样使可组合可点击:
@Composable
override fun Content() {
Column(
modifier = GlanceModifier
.fillMaxSize()
.clickable(onClick = actionRunCallback<ClickOnWidget>())
) {
Text(
text = "Title",
modifier = GlanceModifier.fillMaxSize(),
)
}
}
ActionCallback 如下所示:
class ClickOnWidget : ActionCallback {
override suspend fun onRun(context: Context, glanceId: GlanceId, parameters: ActionParameters) {
// Update my table with the click
}
}
我希望这里有一个 appWidgetId,但只看到一个glanceId:GlanceId。我可以使用它来获取 appWidgetId 还是直接使用glanceId作为我的表中的标识符?
(2) 我想根据表格中的数据设置我的小部件的样式。根据具有相应 appWidgetId 的表条目设置小部件样式的最佳方法是什么?例如。有点像这样:
@Composable
override fun Content() {
Column(
modifier = GlanceModifier
.fillMaxSize()
.clickable(onClick = actionRunCallback<ToastAction>())
) {
Text(
// *** Add a text depending on the appWidgetId ***
text = titleOf(appWidgetId),
modifier = GlanceModifier.fillMaxSize(),
)
}
}
【问题讨论】:
标签: android android-widget android-jetpack-compose glance glance-appwidget