使用AsyncTask在Android主页小部件中将TextView的最后文本与新的,更新的文本进行比较?

时间:2014-12-07 17:09:12

标签: android android-asynctask android-widget textview android-pendingintent

我制作了一个简单的主屏幕小部件,它有两个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值可能会发生变化,我希望(例如)更改颜色如果来自新XML的新值大于小部件中的当前值,则为TextView。我怎样才能做到这一点?我试着四处寻找,但没有设法从AsyncTask的onPostExecute方法中找到如何影响在主窗口小部件类中创建的模型类对象。

1 个答案:

答案 0 :(得分:0)

您可以使用static int字段存储最后一个值:

private static int lastValue1 = -1; // you can use other initial value
private static int lastValue2 = -1;

然后您可以使用它,例如:

if( lastValue1 < xv.getFieldValue1() ) {
  lastValue1 = xv.getFieldValue1();
  views.setTextViewText(R.id.textView1, xv.getFieldValue1());
}
// the same for second value.

另一种解决方案是将最后一个值存储在SharedPreferenced中。