首页 文章

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

提问于
浏览
0

我做了一个简单的主屏幕小部件,它有两个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 回答

  • 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中存储最后一个值 .

相关问题