Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 更新适配器的最佳实践_Android_Gridview_Adapter - Fatal编程技术网

Android 更新适配器的最佳实践

Android 更新适配器的最佳实践,android,gridview,adapter,Android,Gridview,Adapter,我有一个适配器,可以显示带有文本的网格缩略图。这些缩略图很难加载、绘制等等 缩略图gridview不断地被新内容填充,比如说,每2秒就有一个新项目 我的适配器有一个从外部调用的函数,用于注入新项: public void postNew(Item i) { arrayStuff.put(i); notifyDataSetChanged(); } 在我当前的方法中,当我在gridview中插入一个新元素时,它会刷新所有内容,即使添加的项不可见。刷新过程有点破坏了体验,特别是当用户

我有一个适配器,可以显示带有文本的网格缩略图。这些缩略图很难加载、绘制等等

缩略图gridview不断地被新内容填充,比如说,每2秒就有一个新项目

我的适配器有一个从外部调用的函数,用于注入新项:

public void postNew(Item i) {
    arrayStuff.put(i);
    notifyDataSetChanged();
}
在我当前的方法中,当我在gridview中插入一个新元素时,它会刷新所有内容,即使添加的项不可见。刷新过程有点破坏了体验,特别是当用户正在浏览gridview并且新内容到达时


您建议如何改进这一点?是否有更轻的“notifyDataSetChanged()”或类似的内容?

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


至于“重”位图,尽管它很重,但我认为您应该重新采样或将其缩放到所需的最小大小,使用LruCache可以减少在更改的notify数据集上重新绘制的需要。

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


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

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

有趣的。。。如果getLastVisiblePosition