【linux 2.6 源码】【溯源码活动】【恐怖链接源码】notifyitem源码

时间:2024-11-26 12:41:57 来源:烟台进口燕窝溯源码怎么查 分类:热点

1.RecyclerView中notifyItemRemoved的一个坑

notifyitem源码

RecyclerView中notifyItemRemoved的一个坑

       ç¢°åˆ°è¿™æ ·ä¸€ä¸ªéœ€æ±‚,有一个关注列表,点击列表上的关注按钮可以取消关注。

        首先列表这里选择的是RecyclerView,实现起来也较为简单,实现Adapter绑定数据就可以了

        但是取消关注后需要将该用户从列表里移除,为了不整体刷新,所以选择使用notifyItemRemoved而不是notifyDataSetChanged方法,因为notifyItemRemoved不会删除adapter中数据集中真实的元素,因此还需要调用 dataList.remove(i)

        但是测试的时候发现了一个问题:

        点击第一个用户,成功删除,nice.

        这时候原来的第二个用户成了第一个用户,按照之前的逻辑,这个地方的position应该是0。但是,点击之后删除的是现在的第二个用户,也就是说position是1。

        网上搜索后发现,在notifyItemRemoved虽然移除了视图,但是没有进行重新bind的过程,因此position还是之前的position,源码linux 2.6 源码因此需要调用notifyItemRangeChanged方法来告诉应用position位置需要重新计算

        上面一段来自RecyclerView源码中的注释,notifyItemRangeChanged方法需要两个参数,第一个来指定从哪里开始数据进行了变化,第二个参数需要指定总共变化了多少个数据。

        在最开始提到的需求下,positionStart应该等于要删除的那个数据的坐标,itemCount应该为从positionStart开始到数据列表最后,但是为了方便就直接填getItemCount()更新所有数据了