美文网首页
RecyclerView实现网络图片多选的最佳实现

RecyclerView实现网络图片多选的最佳实现

作者: 方凌川 | 来源:发表于2019-06-27 12:15 被阅读0次

    如果你也有这样的需求,以下会帮你跨越一些坑:

    1、加载更多图片时图片显示错乱,选中状态也被复用;
    2、调用 notifyDataSetChanged() 时图片闪烁;

    该需求实现使用了 RecyclerView 和 Glide 图片加载;

    第1个问题是由于 RecyclerView 的复用导致,所以需要在 Adapter 中的加载图片的地方,设置 View 的 tag 来判断view是否被复用,如:

    //设置复选框的tag, (!不要将tag设置在imgView上,否则Glide会抛异常)
    val url = mUrls.get(position)
    if(cbChosen.tag != url){
        cbChosen.tag = url
        Glide.with(imgView).load(url).into(imgView)
    }
    

    当你完成上面的操作,图片显示就没什么问题了。

    而当你长按或者点编辑需要显示复选框(CheckBox)时,需要调用notifyDataSetChanged() 去更新所有 Item 的显示,这时候会出现图片重新加载的闪烁。

    这时候,第2个问题出现了,这里需要用到 adapter 的 setHasStableIds(true)

    //在 Adapter 创建的时候
    adapter.setHasStableIds(true)
    
    //然后再 Adapter 中重写 getItemId() 方法,并修改器返回值
    override fun getItemId(position: Int): Long{
        return position.toLong()
    }
    
    //注意,一定要重写getItemId()方法
    

    至此,就有了一个比较好的效果了!

    相关文章

      网友评论

          本文标题:RecyclerView实现网络图片多选的最佳实现

          本文链接:https://www.haomeiwen.com/subject/rqelcctx.html