在我的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/