ListView 在滚动期间更改项目

Ale*_*lms 5 android listview scroll

我正在使用自定义 ArrayAdapter 来实现 ListFragment 来填充列表。每个行项目都有一个 ImageView 和三个 TextView。数据通过 XML 进行解析,图像进行异步加载。

我遇到的问题是 ListView 填充并且看起来不错,但滚动时出现问题。我可以同时在屏幕上显示 7 个项目。当我滚动到第 8 行时,它突然发生变化,因此应该出现下一行。它仅对可被 8 整除的行(即第 8、16、24 行等)执行此操作。

我使用 ViewHolder 模式来确保此 ListView 的良好速度。我认为问题出在某个地方,但我已经四处搜索,看来我正在正确地执行此模式,并且我已经没有足够的东西来检查以解决此问题。我究竟做错了什么?谢谢!

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    MyViewHolder holder;
    if (row == null) {
        LayoutInflater inflater = LayoutInflater.from(mContext);
        row = inflater.inflate(R.layout.browse_result_list_item, null, false);
        holder = new MyViewHolder();
        holder.adTitle = (TextView) row.findViewById(R.id.adTitle);
        holder.region = (TextView) row.findViewById(R.id.region);
        holder.time = (TextView) row.findViewById(R.id.time);
        holder.thumbnail = (ImageView) row.findViewById(R.id.browseThumbnail);
        row.setTag(holder);
    } else {
        holder = (MyViewHolder) row.getTag();
    }
    SearchResult result = mObjects.get(position);

    holder.adTitle.setText(result.getTitle().substring(0, result.getTitle().length()-3)); // three ... at the end, remove them
    holder.region.setText(result.getRegion());
    holder.time.setText(result.getPostingTime());

    // Download the image thumbnail
    ArrayList<String> urls = result.getImageUrls();
    if (urls.size() > 0)
        download(urls.get(0), holder.thumbnail);
    else // No image for this post, put a placeholder
        holder.thumbnail.setImageResource(R.drawable.ic_action_picture);

    return row;
}

private static class MyViewHolder {
    public static TextView adTitle;
    public static TextView region;
    public static TextView time;
    public static ImageView thumbnail;
}
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@frozenkoi,我找到了解决方案。最终是 ViewHolder 内的静态变量导致了问题。它们现在只是公开的,类是静态的,问题已经解决了。

Ale*_*lms 3

感谢@frozenkoi,我找到了解决方案。最终是 ViewHolder 内的静态变量导致了问题。它们现在只是公开的,并且类是静态的,问题已经解决。

private static class MyViewHolder {
    public TextView adTitle;
    public TextView region;
    public TextView time;
    public ImageView thumbnail;
}
Run Code Online (Sandbox Code Playgroud)