RecyclerView 刷新闪烁

2019-05-21 12:37:34

参考地址 https://www.jianshu.com/p/4a2b18135447   这个没试过,不知道有没有用

前言

最近做项目,使用 RecycleView + SwipeRefreshLayout 刷新时,列表总是闪烁。

1、为什么会闪烁?
闪烁是 notifyDataSetChange 造成的。由于适配器不知道整个数据集中的哪些内容已经存在,在重新匹配 ViewHolder 时发生的。

当然,遇到这个问题时有去搜索一些答案,看到的很多都是去禁止 RecycleView 的默认动画,可惜这对我没什么用。下面的方法是对我有用的。

2、设置 setHasStableIds

下面给大家介绍一个方法 setHasStableIds

        /**
         * Indicates whether each item in the data set can be represented with a unique identifier
         * of type {@link java.lang.Long}.
         *
         * @param hasStableIds Whether items in data set have unique identifiers or not.
         * @see #hasStableIds()
         * @see #getItemId(int)
         */
        public void setHasStableIds(boolean hasStableIds) {            if (hasObservers()) {                throw new IllegalStateException("Cannot change whether this adapter has "
                        + "stable IDs while the adapter has registered observers.");
            }
            mHasStableIds = hasStableIds;
        }

long 类型的标识可以表示数据集中的每个项目。

DemoAdapter  mAdapter=new DemoAdapter();
mAdapter.setHasStablesId(true);

设置了这个属性后,我们必须给每个 Item 设置唯一的 ID。

3、重写 getItemId

在 Adapter 类中重写该方法来给每个 Item 一个唯一的ID。

@Overridepublic long getItemId(int position){    return items.get(position).getId();
}

这样写完之后闪烁就不再发生了。

getId() 只是我的一个方法,如果您没有一个类似 id 的唯一值,则可以使用字符串上的 hashCode() 来获取唯一值。结果也是一样的。



  • 2020-12-03 10:43:18

    xshell 连接 wsl

    装上 ubuntu on windows 后,默认要先打开 cmd, 再运行 bash 进入 ubuntu 的 shell。 但是这个shell很难看,配色不好就算了,还存在各种复制粘贴麻烦、默认没进入 home 目录、各种报警声等问题。所以尝试用 xshell 登陆 ubuntu

  • 2020-12-03 10:48:41

    在window10和Linux子系统 WSL如何互传文件

    想将 window下下载的文件上传到 linux 子系统中,如何用命令实现,其实可以将文件直接拖拽到 linux 在window下的目录即可(C:\Users\yunan.hu\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs)但是在linux下用命令怎么实现呢?

  • 2020-12-03 16:25:34

    WSL安装及升级WSL2

    幸好我们有了WSL(Windows Subsystem for Linux),顾名思义就是Windows中可以用Linux了,当然命令也会丰富更多,尤其是WSL2的发布,使得更多原来只能在Linux中做的事情现在也可以在Windows中干了。那么接下来我们就分别介绍WSL和WSL2的安装。

  • 2020-12-06 16:46:11

    git撤销pull

    刚刚不小心pull了一下,有错误,想撤回怎么办。

  • 2020-12-06 19:05:13

    visual studio 配置 intellij idea快捷键

    我原本从intellij idea转换到visual studio是因为webstorm没办法远程开发,而visual studio有remote wsl,和remote ssh,看着挺不错的样子。