RecyclerView 图片错位空白的问题

2018-08-26 00:18:04

这几天一直在研究我做的一个功能,牵扯到了recycleview,图片显示错位,空白的问题。


关于RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)

我参考了下面这个文章,写的真是好啊。


RecyclerView中ViewHolder重用机制理解(解决图片错乱和闪烁问题)


Android学习之-RecyclerView带刺的玫瑰


下面说一下我的实际理解与操作。


1.图片错位的原因是因为图片异步记载返回去展示出的问题。图片空白,是item刷新,请求图片时间上的问题。

2。viewHolder.setIsRecyclable(false); 就没有tag,不设置 就有tag,但是有没有没啥区别

设置tag,

tag只能设置只能限制并准确的实现图片展示在哪个元素上,这个类似于js的异步操作,能确定这个元素对不对。

但是并不能根据tag来判断我当前的holder以及holder下面的子元素是否已经加载了图片,因为holder等都是服用过来的,tag也复用过来了。所以这个只能确保图片不错位,但是不能保证图片快速加载图片空白的问题。

然后我又尝试用map来保存图片加载过的状态,然后加载并正确的图片item不再去刷新他,不知道为什么这样更错位了。我又用map保留了图片的宽度,不再去根据图片获得宽高,结果还是有空白时间,这个真是没办法。


homeAdapter.setHasStableIds(true);


     @Override

        public long getItemId(int position) {

            return position;

        }


我也尝试了给adapter设置这个,依然还需要重新刷新item,真不知道为啥。

return 1。 或者设置,这样倒是不刷新了,但是图片都成了一个图片。



2、tips1:如果你调用了:viewHolder.setIsRecyclable(false);那么这个Item的onViewRecycled将永远不会调用。


虽然每个holder不复用了,但是每次holder都是新的 ,所以也不会有tag。无语



总之错位能解决,空白我是没解决,就先这样吧,等看到开源的解决掉的开源工程的时候在说吧,研究了一天。

  • 2019-12-06 13:16:18

    vue mixins组件复用的几种方式

    最近在做项目的时候,研究了mixins,此功能有妙处。用的时候有这样一个场景,页面的风格不同,但是执行的方法,和需要的数据非常的相似。我们是否要写两种组件呢?还是保留一个并且然后另个一并兼容另一个呢? 不管以上那种方式都不是很合理,因为组件写成2个,不仅麻烦而且维护麻烦;第二种虽然做了兼容但是页面逻辑造成混乱,必然不清晰;有没有好的方法,有那就是用vue的混合插件mixins。混合在Vue是为了提出相似的数据和功能,使代码易懂,简单、清晰。

  • 2019-12-06 13:26:30

    vue的mixins混入合并规则

    混入minxins:分发vue组件中可复用功能的灵活方式。混入对象可以包含任意组件选项。组件使用混入对象时,所有混入对象的选项将混入该组件本身的选项。

  • 2019-12-06 16:50:34

    Intellij idea 如何关闭无用的提示

    Linux:Settings —> Editor —> Inspections —> General —> Duplicated Code Mac:Preferences --> Editor —> Inspections —> General —> Duplicated Code fragment 将对应的勾去掉。

  • 2019-12-09 15:36:56

    神秘的 shadow-dom 浅析,shadow-root

    顾名思义, shadow-dom,直译的话就是 影子dom ?我觉得可以理解为潜藏在黑暗中的 DOM 结构,也就是我们无法直接控制操纵的 DOM 结构。前端同学经常用开发者工具的话,查看 DOM 结构的时候,肯定看到过下面这样的结构:

  • 2019-12-10 11:13:50

    前端实战-基于Nuxt的SVG使用

    虽然我们在日常开发的时候,在使用iview 或者element ui等组件时,通常会包含一些常用icon;但是在面对一些特定的需求时,或者自己想high一下,这些通用的icon并不能很好的满足我们。这个时候我们可能会拿到一些SVG适量图,但是怎么去使用这些矢量图呢。

  • 2019-12-10 11:15:08

    用CSS给SVG 的内容添加样式

    SVG图形的一个最常见用例是图标系统,其中最常用的SVG sprite技术就是使用SVG<use> 元素在文档中任意位置“实例化”图标。 使用<use>元素实例化图标或任何其它的SVG元素或图像,给元素添加样式时经常会碰到一些问题。这篇文章的目的是尽可能给你介绍一些方法来解决:使用<use>引入的内容添加样式受限的问题。 但是在开始之前,我们先快速浏览一下SVG的主要结构和分组元素,然后慢慢进入use的世界中,以及shadow DOM,然后重回CSS的怀抱。我们会逐步讲解为什么给<use>内容添加样式会比较麻烦,以及有什么好的解决方案。

  • 2019-12-10 16:21:05

    display:flex的子元素无法设置宽度

    子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是自动收缩不?0表示不自动收缩,1表示自动收缩;所以将子元素(图片)添加属性:flex-shrink:0;即

  • 2019-12-10 21:14:11

    axios文件上传功能+formData

    在项目中使用axios上传文件,记得new一个纯净的axios或者考虑用ajax请求。因为axios在项目估计已经用了全局配置请求头等信息,这里的配置可能被全局请求头拦截,导致请求失败。 2.1构造formData 作者:exmexm 链接:https://www.jianshu.com/p/9c708a47d8a5 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。