LinearLayout动态加载Button方案
2016-03-07 23:12
337 查看
重构外勤代码过程中遇到这样的场景:
有一个ListView,加载的是工单数据。每一个Item中会有若干Button,Button的多少以及具体是什么功能都跟工单的状态有关。要做到灵活多变,因为经常会有需求变更,不同状态对应不同的按钮。比如:工单待接收状态下,要求绑定退回跟接收按钮;接收状态下要求绑定退回,延期申请,完工上报按钮等等。个人设计的方案如下:
用XML文件配好不同状态对应的可能出现的按钮,包括按钮显示的文字,图标,按钮绑定的操作类等相关信息。但是这样有一点,不同状态对应的按钮可能会重复,因此配的XML有冗余。后来又考虑先配一个所有按钮的XML文件,再配一个状态对应按钮tag的XML,这样需求变更时,只用改状态对应的按钮tag就好,也显得干净利落。但是这样也有弊端,两个XML结构不一样,解析花的开销较大。结合项目本身综合考虑到,冗余不会太多,就选择了第一个方案,直接配。
方案已定好,那怎样动态添加到ListView中呢?设计如下:
adapter的View中预先留一个LinearLayout当做Button的容器。运行过程中,通过工单状态得到绑定的按钮,然后计算每个按钮应该占容器的宽度,通过LayoutInflater得到Button的View,用LinearLayout把Button一个一个add进去,并对每个View设置监听,监听执行按钮的点击方法。
这里计算每个按钮的宽度,不能直接在自己的方法中用LinearLayout.getWidth(),因为此时LinearLayout并没有被渲染,宽度为0,所以应该在重写这个LinearLayout,在onMeasure()方法里获得LinearLayout的宽度。
有一个ListView,加载的是工单数据。每一个Item中会有若干Button,Button的多少以及具体是什么功能都跟工单的状态有关。要做到灵活多变,因为经常会有需求变更,不同状态对应不同的按钮。比如:工单待接收状态下,要求绑定退回跟接收按钮;接收状态下要求绑定退回,延期申请,完工上报按钮等等。个人设计的方案如下:
用XML文件配好不同状态对应的可能出现的按钮,包括按钮显示的文字,图标,按钮绑定的操作类等相关信息。但是这样有一点,不同状态对应的按钮可能会重复,因此配的XML有冗余。后来又考虑先配一个所有按钮的XML文件,再配一个状态对应按钮tag的XML,这样需求变更时,只用改状态对应的按钮tag就好,也显得干净利落。但是这样也有弊端,两个XML结构不一样,解析花的开销较大。结合项目本身综合考虑到,冗余不会太多,就选择了第一个方案,直接配。
方案已定好,那怎样动态添加到ListView中呢?设计如下:
adapter的View中预先留一个LinearLayout当做Button的容器。运行过程中,通过工单状态得到绑定的按钮,然后计算每个按钮应该占容器的宽度,通过LayoutInflater得到Button的View,用LinearLayout把Button一个一个add进去,并对每个View设置监听,监听执行按钮的点击方法。
这里计算每个按钮的宽度,不能直接在自己的方法中用LinearLayout.getWidth(),因为此时LinearLayout并没有被渲染,宽度为0,所以应该在重写这个LinearLayout,在onMeasure()方法里获得LinearLayout的宽度。
相关文章推荐
- 5. SpringMVC注解类实践例子1
- 重温javase—MySQL数据库基础
- EcStore中的App是什么东西?
- 类的继承8.2
- codeforces 650B . Image Preview 二分
- opendaylight(Li) l2switch 源代码分析(3)--packethandler
- Android Studio Git .gitignore规则不生效的原因
- [置顶] Unity中关于图形学的基础知识—矩阵(二)
- 每日总结-2016年3月7日
- 内嵌函数和闭包
- 二分图------》Hopcroft-Karp算法 hdu2389
- 【讀書筆記】成为技术领导者
- SharePoint Designer 2013 连接 Office 365 必需安装2个SP
- 使用 ZXing Android Embedded 实现二维码扫码
- Android SDK 在线更新镜像服务器资源:
- 集合框架
- SDRAM学习笔记(一)
- 模运算法则
- 使用二维数组实现------判断2048小游戏的结束
- 浅谈大端小端