需求描述
微信消息列表中的小红点为一级小红点
点击订阅号后,订阅列表页面为二级小红点
点击某一个订阅号后,消除该订阅号相关各级小红点
微信只是一个小例子,我的项目中,小红点的级数是超多的.
项目样例:
员工提交请假申请单,人事会收到后台推送,推送中附带一个code
code | 含义 |
---|---|
200 | 请假 |
201 | 出差 |
300 | 入职 |
301 | 辞职 |
人事一级页面
- 基本功能(添加小红点,显示200,201,300,301小红点数量总和)
- 其他功能(添加小红点,显示......小红点数量总和)
人事二级页面(基本功能)
- 审批(添加小红点,显示200,201小红点数量总和)
- 档案(添加小红点,显示300小红点数量总和)
- 合同(301)
人事三级页面(审批)
- 请假(添加小红点,显示200小红点数量总和)
- 出差(添加小红点,显示201小红点数量总和)
人事四级页面(请假)
- 进入此页面消除掉请假的小红点数量
方案:
- 原始方案
- 收到推送后,使用RxBus发送相应code的通知
- 各级页面注册各个条目的所有code,收到通知后,计算红点总和更新界面
- 当需要添加一个code的时候,各级涵盖该code的页面都要修改相应的处理
这种方案想想都要疯了
- 改进版本
- 一级页面,比如基本功能,只需告诉它,该条目的红点数来源于二级页面(基本功能)
- 二级页面,比如审批,只需告诉它,该条目的红点数来源于三级页面(审批)
- 三级页面,比如请假,只需告诉它,该条目的红点数来源于四级页面(请假)
- 四级页面,定义该页面处理的code值,可多个,页面退出时,自动消除code对应的各级红点数
使用方式
一级页面基本功能红点处理
/**
* classes 所管理的页面
* @param num 所管理页面红点总数
*/
@DealCodeClass(classes = {基本功能Activity.class})
public void unpdate(int num) {
//根据红点总数更新界面
......
}
二级页面审批红点处理
/**
* classes 所管理的页面
* @param num 所管理页面红点总数
*/
@DealCodeClass(classes = {审批Activity.class})
public void unpdate(int num) {
//根据红点总数更新界面
......
}
三级页面请假红点处理
/**
* classes 所管理的页面
* @param num 所管理页面红点总数
*/
@DealCodeClass(classes = {请假Activity.class})
public void unpdate(int num) {
//根据红点总数更新界面
......
}
四级页面请假消息处理
@DealCode(codes = {200})
public class 请假Activity {
/**
* 收到RxBus通知时,调用该方法
* codes 表示通知的码 可多个,该codes各级页面自动管理
* code 表示通知的码 一个,该code各级页面不管理
*/
@Subscribe(codes = {200}, threadMode = ThreadMode.MAIN)
public void refreshCode() {
}
}