1

我有一个带有 ListView 的主屏幕小部件(Android 4.x - ICS),经过一些更改,列出的项目没有正确显示 - 我的意思是,显示“旧”数据。它总是这样:

  1. listview 的可见部分总是显示好的(= 新的)数据
  2. 列表的不可见部分(向上或向下滚动)总是显示一些旧项目(有些不是)

看起来,列表的不可见部分被缓存了,当我向上或向下滚动时,只有少数项目被刷新,而其他项目则没有。它看起来很有趣,因为当我上下滚动时,有些项目显示旧的,一些新的,而且总是不同的项目,就像绝对随机的一样。很简单很奇怪...

有什么问题?这是我的列表视图:

<ListView
    android:id="@+id/panelNews"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_marginLeft="@dimen/padding"
    android:layout_marginRight="@dimen/padding"
    android:layout_weight="1"
    android:gravity="top"
    android:paddingTop="@dimen/padding"
    android:scrollingCache="false"
    android:animationCache="false">
</ListView>

这是我的 MyWidgetServiceFactory 方法的代码(每次数据更改都会触发此方法):

public void onDataSetChanged() {
    MyLogger.log(TAG, "onDataSetChanged");
    listItems = dbHandler.getRecords(prefHandler);
}

这就是我如何通知 MyWidgetServiceFactory 来自我的 UpdateService 的数据更改:

AppWidgetManager manager = AppWidgetManager.getInstance(this);
int[] appWidgetIds = manager.getAppWidgetIds(new ComponentName(this, MyWidget.class));
manager.notifyAppWidgetViewDataChanged(appWidgetIds, R.id.panelNews);
4

2 回答 2

0

你应该使用函数

notifyDataSetChanged()

在您用来填充列表的适配器上调用。检查此链接 以获取更多详细信息。

于 2012-08-15T08:56:07.837 回答
0

好的,完全是我的错,这是愚蠢的错误 - 我只是忘记更新 1 个字段。

于 2012-08-15T10:00:29.667 回答