RecyclerView处理物品

时间:2017-01-04 13:10:09

标签: android android-recyclerview

我的RecyclerView项目每个包含5个位图。我将在滚动期间下载这些位图。列表中可以有数百个项目。我有以下问题:

  • 如何强制RecyclerView不缓存屏幕外项目?记忆 效率是我的首要任务。如果我不得不重新创建它就可以了 每次他们在屏幕上的项目。
  • 我是否需要手动处理屏幕外的项目(例如,在我的电话上打电话回收) 位图)?如果答案是,那我该怎么办呢?

UPD:找到了如何防止缓存:

list.getRecycledViewPool().setMaxRecycledViews(itemType,numCachedItems);

2 个答案:

答案 0 :(得分:0)

正如卡姆兰所建议的那样使用毕加索。 否则使用Glide,这是一个位图转换的例子:

// load photo
Glide.with(mCtx)
     .load(url)
     .asBitmap()
     .into(new SimpleTarget<Bitmap>(100,100) {
         @Override
         public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                myImageView.setBitmap(resource);
            }
       });

这是在MainThread上的MyImageView(扩展ImageView)(被授权更改ui)

@UiThread
public void setBitmap(Bitmap resource) {
    this.setImageBitmap(resource);
}

要禁用缓存,您可以尝试

mRecyclerView.setItemViewCacheSize(0)

答案 1 :(得分:0)

我刚刚意识到RecyclerView重用了项目,因此我可以在onBindViewHolder方法中卸载我的数据