LinearLayout动态加载Button方案

重构外勤代码过程中遇到这样的场景:

有一个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的宽度。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值