我有一个ListView,让我们说30个项目。
对于这些项目,我使用的是自定义适配器,我将其存储在包含活动的实例变量中。
现在我想在某些情况下缓存内容(我的列表与模型对象)。这意味着如果我恢复活动,没有什么必须改变。
如果模型被缓存,我假设我不需要重绘视图,因为没有任何改变。
没有缓存我每次都会调用它,在onResume:
myAdapter.setMyData(new ArrayList<MyType>());
myAdapter.setFoo(new Foo());
myAdapter.notifyDataSetChanged();
这样就可以了,列表显示得很好。
但是当我不调用它时(除了第一次恢复此活动)(因为我正在使用缓存),ListView看起来很奇怪。虽然通常~7个项目适合屏幕,但现在我只有~2个,中间有很长的空间。而且项目内的资产也有点转移。向下滚动修复它,以下项目看起来正常,如果我向后滚动一切看起来很好。
为什么会这样?
编辑:问题的关键是
myAdapter.notifyDataSetChanged();
如果我每次在onResume上调用该列表都会正确显示。但是我不明白我为什么要这样做,因为我的数据集没有改变。