前言

目录

ARouter

  1. 命名分组引发的问题

    • ARouter主要应用于组件化架构中,使用方法:

      1. 定义path路径,要求至少两个斜杠,比如:/user/login
      2. 通过类注解@Route注入目标位置,比如在LoginActivity上面@Route(path = “/user/login”)
    • 问题:
      如果这时在另一个module模块,也使用了路径/user/xxxx,就会出现问题。

    • 原因:
      ARouter会根据第一个斜杠下“user”分组,点击LoginActivity查看可发现,自动生成了一个映射类:ARouter$$Group$$user,而这个类是获取映射关系的关键类。在_navigation获取的时候,只有最后一个ARouter$$Group$$user才会生效。

    • 解决:
      不同模块的group命名不可重复。

RecyclerView

  1. notifyItemRangeInserted()导致的position错位
    • notifyItemRangeInserted()方法有动画效果的官推方法,用于插入数据
    • 问题:
      notifyItemRangeInserted()导致的position错位,原列表的position不变,而新增加的列表的position是新列表的,但是获取的itemBean正确。导致不能准备定位item位置。
    • 原因:
      notifyItemRangeInserted()在调用后,会获取RecyclerView的四级缓存中的viewholder,第一步获取屏幕内的viewholder缓存,而添加之后,只是利用复用增加了item的数量,并没有重新加载onBindViewHolder()方法,就导致它的回调依然是原position,位置错乱。
    • 解决:
      notifyItemRangeChanged()刷新内部数据集,动画效果依然保留。