我正在使用 ArrayAdapter 在具有无限滚动功能的 ListView 中设置数据。ListView 的行中有一个 ImageView 和两个 TextView。首先,我加载了 10 个项目的 ListView,向下滚动时,我调用 setonscrolllistener 中的 Web 服务将接下来的 10 个项目加载到 ListView。当新项目添加到 Arraylist 时,我只需调用adapter.notifysetdatachanged
告诉适配器刷新 ListView。
现在的问题是,每当将新项目添加到 ListView 时,整个 ListView 都会刷新,这会导致 ListView 中已经加载的图像闪烁。是的,我正在缓存磁盘和内存中的所有图像,并且代码非常顺利地进行缓存。
我也尝试使用这个将数据添加到适配器中,adapter.addall(myarraylist)
但它没有帮助。ImageViews 仍在闪烁。我在 StackOverflow 上搜索了很多关于它的内容,发现如果不刷新整个 listView,就无法在 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;
}
有人可以解释一下吗?