【代码编写中,待完善】
简介
微信的会话置顶折叠,看上去,挺不错的,产品要求也搞一个。
方案一:采用即时数据更新,刷新界面
方案二:
首页更新流程:
使用 LoaderManager 更新缺点:
1、会话数量未知(包括置顶会话)
2、数据和cursor挂钩,插入数据,需要修改db
故,整个流程,对外没有可操作的空间。
目前,要做到置顶折叠,需要查询到置顶的会话数量,然后在数据库中,插入一条虚拟数据,最后,刷新界面。而且,点击置顶,需要更改查询的sql。
目前需要解决的问题:
1、置顶的会话数量
2、显示和隐藏置顶布局的时机
3、隐藏后,需要滚动到的位置
置顶的会话数量,如何处理,
方法一,在查询sql前,查询db的置顶数量,但是 LoaderManager 没有提供时机。
方法二,在查询结果中,添加item,但是adapter,是通过cursor处理的,没办法操作。
方法三,在查询刷新后,查询置顶数量,然后插入一条虚拟数据,最后,在重新更新界面。
方案
问题一:置顶的会话数量
采用方案:在刷新以后,查询置顶数量,修改虚拟数据,然后,如果置顶数据变更,在重新刷新ui。
方案缺点:用户置顶会话变化,在临界点的时候,需要更新界面以后,在刷新ui,重新更新一次界面。存在2次刷新的问题。
问题二:显示和隐藏置顶布局的时机
通过onScroll进行处理
问题三:隐藏后,需要滚动到的位置
通过
ListView.smoothScrollToPositionFromTop
,计算距离,进行滚动。
仅仅对隐藏的状态,进行处理,显示置顶,是增加数量,不需要处理。
修改后置顶流程
测试效果