您的位置:首页 > 其它

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的宽度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: