在我的appWidgetProvider中,每次需要更新appWidget时,都必须创建新的RemoteViews对象并为其分配属性:

RemoteViews views = new RemoteViews(context.getPackageName(),layout);
views.setOnClickPendingIntent(R.id.widgetLayout, pendingIntent);
view.setFloat(R.id.nick, "setTextSize", wParameters.getFontSize());
view.setTextViewText(R.id.nick,wParameters.getNick());
.........etc

appWidgetManager.updateAppWidget(appWidgetId, views);

但实际上,我只需要更改一件事,即TextView Text。

我可以以某种方式存储RemoteViews以便在下一次更新中重新使用它,并仅应用
 view.setTextViewText(R.id.nick,wParameters.getNick());
 appWidgetManager.updateAppWidget(appWidgetId, views);

再次?

还是以某种方式获取先前使用的RemoteViews对象?

我想要实现这一点,因为在我的appWidget中再次设置新的RemoteViews对象属性的过程非常昂贵。

假设我的窗口小部件由TextView和ImageView组成。
在窗口小部件的configureActivity中选择ImageView的图像(对于appWidget的每个实例都是唯一的),但是图像处理非常昂贵。
TextView文本需要在每次更新中进行更改。
我想按原样保留ImageView图像,只更改TextView的文本。是否可以在不更新imageView的情况下更新TextView?

如有任何帮助和想法,我们将非常高兴!
谢谢你,加尔

最佳答案



然后仅更改“TextView文本”。

AFAIK,只要保持相同的布局ID,就不需要更新布局中的每个小部件。但是,您有责任始终知道应用程序小部件是否以前已渲染过,这可能会很棘手。因此,通常每次更新每个小部件都更为简单。



不。



不。



然后以IntentService开头的AppWidgetProvider进行工作,就好像它很昂贵一样,您不想在主应用程序线程上进行这项工作。

关于java - 是否可以在appWidget中重用RemoteViews而不是每次都创建新的?以及如何存储它们?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8672727/

10-13 03:42