我正在使用ArrayAdapter来实现带有无限滚动功能的ListView数据设置。每个ListView行中都有一个ImageView和两个TextView。一开始,我用10个项目加载ListView,并在向下滚动时,在setonscrolllistener中调用web服务以将下一个10个项目加载到ListView中。当新项目添加到ArrayList中时,我只需调用
现在的问题是,每当新项目添加到ListView中时,整个ListView都会刷新,这会导致ListView中已经加载的图像闪烁。是的,我将所有图像缓存在磁盘和内存中,代码对缓存的处理非常顺畅。
我还尝试使用
我是这样设置适配器的。
adapter.notifysetdatachanged
来告诉适配器刷新ListView。现在的问题是,每当新项目添加到ListView中时,整个ListView都会刷新,这会导致ListView中已经加载的图像闪烁。是的,我将所有图像缓存在磁盘和内存中,代码对缓存的处理非常顺畅。
我还尝试使用
adapter.addall(myarraylist)
将数据添加到适配器中,但没有帮助。ImageView仍然会闪烁。我在StackOverflow上搜索了很多相关信息,发现不能在不刷新整个ListView的情况下添加和显示更多的项目。我已经知道了这一点,但必须有一种方法可以向ListView添加新数据而不刷新已加载的数据。我是这样设置适配器的。
public View getView(int position, View view, ViewGroup parent)
{
int main = R.layout.layout;
ViewHolder holder = null;
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(main, null);
holder.image = (ImageView) convertView.findViewById(R.id.imageview);
///More stuff
view.setTag(holder);
} else {
holder = (ViewHolder)view.getTag();
}
// Loading ImageViews by Urls
return view;
}
请问有人能够解释一下吗?