ListView在添加新项目时闪烁

Avi*_*ngh 5 android android-listview

我正在使用ArrayAdapter在ListView中设置具有无限滚动功能的数据.ListView的行中有一个ImageView和两个TextView.首先,我正在加载带有10个项目的ListView,然后向下滚动,我调用setonscrolllistener中的Web服务将下一个10项加载到ListView.当新项目添加到Arraylist时,我只是调用adapter.notifysetdatachangedtell adapter来刷新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;
    }
Run Code Online (Sandbox Code Playgroud)

有人可以对此有所了解吗?

AMe*_*rle 2

看来你的做法是正确的,所以问题可能出在你的 imageLoader 上。如果 url 相同,则不应在您的 imageview 上再次设置图像。

例如,您可以setTag (url)在 imageView 上使用该方法并测试 url 是否已更改。

希望对你有帮助。

  • 看起来这是通用图像加载器的问题。我将尝试使用另一个库并告诉您问题是否仍然存在。谢谢回复。 (2认同)