主屏幕小部件中的Listview有时会显示旧(缓存?)数据

时间:2012-08-15 08:38:18

标签: android listview caching widget android-4.0-ice-cream-sandwich

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

  1. listview的可见部分始终显示好(=新)数据
  2. 列表的不可见部分(向上或向下滚动)总是显示一些 旧项目(有些不是)
  3. 看起来,就像缓存列表中不可见的部分一样,当我向上或向下滚动时,只刷新少数项目,而其他项目则不刷新。它看起来很有趣,因为当我上下滚动时,一些项目显示旧的,一些新的,总是不同的项目,如绝对随机。这很简单......

    有什么问题?这是我的ListView:

    <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);
    }
    

    这就是我通过UpdateService通知MyWidgetServiceFactory有关数据更改的方法:

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

2 个答案:

答案 0 :(得分:0)

你应该使用功能

notifyDataSetChanged()

调用您用来填充列表的适配器。检查一下link 了解更多详情。

答案 1 :(得分:0)

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