【问题标题】:ImageView of ListView loading incorrect few second when scrolling ListView滚动 ListView 时 ListView 的 ImageView 加载不正确几秒钟
【发布时间】:2014-08-18 01:52:43
【问题描述】:

我正在使用 ListView,ImageView 是 List 的一个元素。快速滚动列表时遇到问题:系统似乎正在回收视图,直到它在我的 ListView 中加载正确位置的视图,导致图像和文本重复几秒钟。之后,ImageView 正确显示图像。我正在使用通用图像加载器库来加载图像。

    @Override
public View getView(int position, View v, ViewGroup parent) {
    final PhotoViewHolder holder;
    if(v == null){
        LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.photo_item_horizonal_layout, parent, false);
        holder = new PhotoViewHolder();
        holder.imgPhoto = (ImageView)v.findViewById(R.id.imgPhotoIcon);
        v.setTag(holder);
    }else{
         holder = (PhotoViewHolder)v.getTag();
    }
    //item variable is a element at position of ArrayList
    ImageLoader.getInstance().displayImage(item.getImageUrl(), holder.imgPhoto);
    ...
    }

谁能帮帮我? 提前致谢

【问题讨论】:

  • 你能告诉我们适配器代码吗?
  • ListView 就是这样工作的。它回收视图。您需要在每次调用 getView 时完全设置所有 UI 元素,以使其正常工作。发布您的getView,您可能没有正确。
  • 显示你的整个适配器代码?

标签: android listview universal-image-loader


【解决方案1】:

你是在后面的代码中自己更改 ImageView 的图像吗? 如果你这样做,你应该打电话给

ImageLoader.getInstance().cancelDisplayTask(holder.imgPhoto);

让库知道图片和imageview之间的链接坏了

【讨论】:

    【解决方案2】:

    在加载图像时使用占位符图像。你可以通过 UIL 选项来做到这一点:

    DisplayImageOptions options = new DisplayImageOptions.Builder()
                    .showImageOnLoading(R.drawable.placeholder)
                    ......
                    .build();
    

    这应该可以解决您的问题。

    【讨论】:

      【解决方案3】:

      做一件事从This link 下载 Aquery 将那个 .jar 文件放在你的 Lib 文件夹中,然后将你的代码更改为:

        @Override
        public View getView(int position, View v, ViewGroup parent) {
          final PhotoViewHolder holder;
          if(v == null){
              LayoutInflater li = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
              v = li.inflate(R.layout.photo_item_horizonal_layout, parent, false);
              holder = new PhotoViewHolder();
              holder.imgPhoto = (ImageView)v.findViewById(R.id.imgPhotoIcon);
              v.setTag(holder);
          }else{
               holder = (PhotoViewHolder)v.getTag();
          }
          //item variable is a element at position of ArrayList
             AQuery aQuery=new AQuery(v)
             aQuery.id(holder.imgPhoto).image(item.getImageUrl().toString());
      
          }
      

      【讨论】:

        猜你喜欢
        • 2023-03-07
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        相关资源
        最近更新 更多