在我的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组成。 ImageView的图像是在widget的configureActivity中选择的(appWidget的每个实例都是唯一的),但是图像处理很昂贵。 每次更新都需要更改TextView文本。 我想保留ImageView图像,只改变TextView的文本。是否可以更新TextView而不更新imageView?
欢迎任何帮助和想法! 谢谢先进,Gal。
答案 0 :(得分:2)
但实际上,我只需要更改一个TextView Text。
然后只更改“TextView Text”。
AFAIK,只要您保持相同的布局ID,如果您不想更新,则无需更新布局中的每个小部件。但是,您有责任始终知道应用程序窗口小部件是否先前已呈现过,这可能会变得棘手。因此,每次更新每个小部件通常更简单。
我可以以某种方式存储RemoteViews以便在下次更新时重复使用
没有
或以某种方式获取以前使用过的RemoteViews对象?
没有
我想实现这一点,因为在我的appWidget中再次设置新的RemoteViews对象属性的过程非常昂贵。
然后在你的IntentService
开始的AppWidgetProvider
中开展工作,就好像它是那么昂贵,你不想在主应用程序线程上做这项工作。