只是更新一个小部件RemoteViews而不是完全创建一个新的?

时间:2010-12-25 00:14:33

标签: android android-widget onupdate

因此,在我的AppWidgetProvider类中的onUpdate方法中,我最终执行了一些非常重要的代码,以便我可以完全重新创建一个新的RemoteViews对象。实际情况是,我真的只需要在每次更新时在RemoteView中的一个textview中设置文本。反正只是修改特定小部件已经使用的RemoteView?

-Kurtis

3 个答案:

答案 0 :(得分:17)

首先,RemoteView不是View。它是一组构建View层次结构的指令。它用于在另一个进程中重新创建View(App Widgets不会在您的应用程序的进程中执行)。因此它是可序列化和可变的。

因此,当您初始化RemoteView时,只需在某处存储对它的引用,例如在自定义AppWidgetProvider的字段中。 下次需要时,从现场获取并更改其中的内容。要在TextView中更改字符串,请使用setString(..)

remoteView.setString(textViewId, "setText", "some text for TextView")

答案 1 :(得分:17)

如果您使用的是当前的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.setString,而是 remoteView.setTextViewText

答案 2 :(得分:0)

您可以更新远程视图,然后调用

ComponentName componentName= new ComponentName(context, YourClass.class);
AppWidgetManager.getInstance(context).updateAppWidget(componentName, remoteViews);

on,AFAIK应该更新小部件