如何从回收列表视图项中删除数据

时间:2015-11-06 22:40:57

标签: android

我使用自定义列表视图适配器, a)查看回收, b)视图持有者对象。

我还成功实现了一个异步图像加载器类,将位图加载到列表视图中,以获得更流畅的滚动体验。

问题现在看起来像回收,如果我错了就更正了,但是从视觉角度看,回收显示先前加载的位图,然后加载新的位图以便有一个简短的但是旧图像被新图像替换之间明显的闪烁。

在使用文本视图之前,我没有注意到这种效果。这是回收问题吗?当列表项退出可见屏幕区域时,有没有办法刮掉旧位图?

是的,我知道有第三方库可以解释所有这些影响。如果我无法手动解决这个问题,那么我会查看一个库。

这是我的列表适配器

    // Get the data item for this position
    SongObject songObject = list.get(position);

    // view lookup cache stored in tag
    ViewHolder viewHolder; 

    // Check if an existing view is being reused, otherwise inflate the view
    if (convertView == null) {

        viewHolder = new ViewHolder();
        LayoutInflater inflater = LayoutInflater.from(getContext());

        convertView = inflater.inflate(R.layout.list_view_item, parent, false);
        convertView.setTag(viewHolder);

    } else {

        viewHolder = (ViewHolder) convertView.getTag();
    }

    // Set view holder references

    viewHolder.album = (TextView) convertView.findViewById(R.id.album);
    viewHolder.artist = (TextView) convertView.findViewById(R.id.artist);
    viewHolder.title = (TextView) convertView.findViewById(R.id.title);
    viewHolder.albumArt = (ImageView) convertView.findViewById(R.id.album_art);
    viewHolder.duration = (TextView) convertView.findViewById(R.id.duration);

    // Set values to referenced view objects

    viewHolder.album.setText(songObject.album);
    viewHolder.artist.setText(songObject.artist);
    viewHolder.title.setText(songObject.title);
    viewHolder.duration.setText(FormatTime(songObject.duration));

    // Load album art asynchronously for smoother scrolling experience

    new ImageLoader(viewHolder.albumArt).execute(songObject.albumArtURI);

    // Return the converted view

    return convertView;

1 个答案:

答案 0 :(得分:0)

您使用recyclerView吗?你能添加recyclelerViewAdapter实现的代码吗?

onBindViewHolder是一个你应该“调整”之前使用过(或未使用过)viewHolder的地方,然后再将其提供给用户