Android中ListView使用getItemViewType为item设置不同的布局

实际开发过程中,有一处需要显示一个交易记录的列表,这个列表很容易让人联想到用listview来实现,但是这个列表又有稍许不同的地方,那就是它里面的item并不是一样的布局,其中某些部分显示的是消费的记录,而有些地方显示的是充值的记录,也就对应了不同的item布局。而且,这两处地方都是从服务端获取数据的,这两个item的数据对应的类内容也各不相同,该怎么处理呢?下面来一步步实现这个效果,先看效果图:


实现的原理就是listview的adapter中的一个关键的方法就是getItemViewType(getItemViewType),这个方法有一个参数是position,有了这个position我们就可以对list集合中的不同位置的数据进行不同的处理,进而标识不同的type,将list中的数据进行分类处理。
在这个项目中,数据源是从服务端获取的json数据,数据的格式如下:

{
    "status_code": "0",
    "result": [
        {
            "mr_content": {
                "point": "10",
                "member_money": "100",
                "pay_money": "300",
                "cash": "200",
                "bonus": "消费满200元立减50元餐券1张",
                "activities": "三锅鸡1元任吃",
                "coupon": "满100送50",
                "branch_name": "四海一家"
            },
            "mr_id": "25",
            "mr_createtime": "1333333333",
            "mr_type": "0",
            "user_id": "108",
            "merchant_id": "1",
            "branch_id": "1",
            "branch_name": "ffff"
        },
        {
            "mr_content": {
                "member_money": "300",
                "branch_name": "四海一家"
            },
            "mr_id": "30",
            "mr_createtime": "1333333333",
            "mr_type": "1",
            "user_id": "108",
            "merchant_id": "1",
            "branch_id": "1",
            "branch_name": "fff"
        }
    ],
    "status_desc": "ok"
}

可以看到其中mr_content这个字段,是一个自定义对象,但是两个mr_content的内容不同,这里是分别为mr_content的内容定义两个不同的类还是如何处理呢?
一开始,我是分别为两个mr_content定义不同的类,后来发现这样行不通,因为这样做的话定义外层类的时候mr_content就无法指定数据类型了。所以,最后采用某人的方法将mr_content定义为一个类,将两个不同的mr_content的字段都定义进去,解析的时候不会出现问题,没有数据会显示null
下面是我定义的mr_content字段的数据类型ComsumAndChargeRecordBean

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值