在我的AppWidgetProvider类的onUpdate方法中,我最终执行了大量代码以便完全重新创建一个新的RemoteView对象。实际上,每次更新时我只需要在RemoteViews中设置一个TextView中的文本。
有没有办法只修改特定小部件正在使用的RemoteViews?
在我的AppWidgetProvider类的onUpdate方法中,我最终执行了大量代码以便完全重新创建一个新的RemoteView对象。实际上,每次更新时我只需要在RemoteViews中设置一个TextView中的文本。
有没有办法只修改特定小部件正在使用的RemoteViews?
首先,RemoteView 不是一个视图。它是一组指令,用于构建视图层次结构。它被用于在另一个进程中重新创建视图 (小部件不在您应用的进程中执行)。因此,它是可序列化和可变的。
因此,当您初始化 RemoteView 时,只需将其引用存储在某个地方,例如在自定义 AppWidgetProvider 的字段中。
下次需要它时,从字段获取并更改其中的内容。要更改 TextView 中的字符串,请使用 setString(..)
。
remoteView.setString(textViewId, "setText", "some text for TextView")
如果您正在使用当前的API,请注意这是2013年的更新。在您的WidgetProvider类中,有一个将执行更新的方法:
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
rv = new RemoteViews(context.getPackageName(), R.layout.widgetlayout);
rv.setTextViewText(R.id.ofTextViewInWidgetLayoutXML, "Hello World");
appWidgetManager.partiallyUpdateAppWidget(appWidgetIds[i], rv);
请注意,现在使用的是 remoteView.setTextViewText,而不是 remoteView.setString。
partiallyUpdateAppWidget
。 - Tom您可以更新远程视图,然后调用
ComponentName componentName= new ComponentName(context, YourClass.class);
AppWidgetManager.getInstance(context).updateAppWidget(componentName, remoteViews);
根据我所知,这应该更新小部件