更新适配器的最佳实践

时间:2013-06-15 03:51:53

标签: android gridview adapter

我有一个适配器,显示带有文本的缩略图网格。这些缩略图重载,重绘等。

缩略图gridview不断填充新内容,比方说,每2秒发布一个新项目。

我的适配器有一个我从外面调用以注入新项目的功能:

public void postNew(Item i) {
    arrayStuff.put(i);
    notifyDataSetChanged();
}

使用我当前的方法,当我在gridview中插入一个新元素时,它会刷新所有内容,即使添加的项目不可见。刷新过程会破坏体验,特别是如果用户正在浏览网格视图并且新内容到达。

你会如何建议改进这个?是否有一个较轻的'notifyDataSetChanged()'或类似的东西?

3 个答案:

答案 0 :(得分:1)

我不知道任何较轻版本的通知数据集,但您始终可以使用ListView.getFirstVisiblePosition和ListView.getLastVisiblePosition来确定您的最新添加位置是否可见,如果是,则仅调用notifyDataSetChanged。

对于“重”位图,我认为应该重新采样或将其缩放到所需的最小尺寸,使用LruCache可以减少重新绘制通知数据集的需要。

答案 1 :(得分:1)

听起来你可能需要实现某种形式的缓存,将不可见的图像加载到内存中并不是很好的内存管理,理想情况下,当它们变成(或即将变成)时,你会从缓存中检索它们可见。

另一种方法可能是在新内容到达时添加某种形式的可视指示符,然后实现“下拉​​刷新”或类似,然后调用适配器上的notifyDataSetChanged()来刷新内容。我可以想象,如果屏幕内容不断变化,每隔几秒刷新一次就不会有很好的用户体验,因为很难理解。

答案 2 :(得分:0)

您需要创建自定义视图(在运行时动态),添加多个imageview和相应的textview,容器视图应为LinearLayout,之后您可以更新特定视图或元素。