我正在使用 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;
}
有人可以解释一下吗?