我做了一个简单的主屏幕小部件,它有两个TextView字段和一个刷新按钮 . TextViews是从AsyncTask加载的,它可以下载和解析小型XML文件 . 刷新按钮再次调用onUpdate(使用PendingIntent),最后再次调用AsyncTask . 我有一个简单的模型类XMLValues,它可以存储XML中的解析值(并在AppWidgetProvider类中初始化:
public class XmlValues {
private int mFieldValue1;
public int getFieldValue1() {
return mFieldValue1;
}
public void setFieldValue1(int FieldValue) {
mFieldValue1 = FieldValue;
private int mFieldValue2;
public int getFieldValue2() {
return mFieldValue2;
}
public void setFieldValue2(int FieldValue) {
mFieldValue2 = FieldValue;
}
}
在下载和解析XML的AsyncTask(我传入RemoteViews视图,int appWidgetID,AppWidgetManager appWidgetManager)中,postExecute方法如下所示:
protected void onPostExecute(XmlValues xv) {
if (isCancelled()) {
xv = null;
}
views.setTextViewText(R.id.textView1, xv.getFieldValue1());
views.setTextViewText(R.id.textView2, xv.getFieldValue1());
WidgetManager.updateAppWidget(WidgetID, views);
}
这一切都有效(我使用正确的值加载TextViews),但是我试图执行以下操作时遇到困难 - 因为我正在解析的XML值可能会发生变化,我希望(例如)更改TextViews的颜色,如果来自新XML的新值比小部件中的当前值大 . 我怎样才能做到这一点?我试着四处寻找,但没有设法从AsyncTask的onPostExecute方法中找到如何影响在主窗口小部件类中创建的模型类对象 .
1 回答
您可以使用static int字段存储最后一个值:
然后你可以使用它,例如:
另一种解决方案是在SharedPreferenced中存储最后一个值 .