是否可以在appWidget中重用RemoteViews而不是每次都创建新的?以及如何存储它们?

时间:2011-12-29 19:52:51

标签: java android android-widget android-appwidget

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

1 个答案:

答案 0 :(得分:2)

  

但实际上,我只需要更改一个TextView Text。

然后只更改“TextView Text”。

AFAIK,只要您保持相同的布局ID,如果您不想更新,则无需更新布局中的每个小部件。但是,您有责任始终知道应用程序窗口小部件是否先前已呈现过,这可能会变得棘手。因此,每次更新每个小部件通常更简单。

  

我可以以某种方式存储RemoteViews以便在下次更新时重复使用

没有

  

或以某种方式获取以前使用过的RemoteViews对象?

没有

  

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

然后在你的IntentService开始的AppWidgetProvider中开展工作,就好像它是那么昂贵,你不想在主应用程序线程上做这项工作。