android关于ListView加载时使用多种不同xml的Item的实现

1、主要使用到了BaseAdapter中的方法
 @Override
    public int getItemViewType(int position) {
        int isRoot = Integer.parseInt(listData.get(position).get("isRoot"));
        if (isRoot == 1) {
            return TYPE_R;
        } else {
            return TYPE_C;
        }


    }

根据列表数据判断当前Item使用哪个Type

2、在getView()的时候根据不同type选择使用不同的布局

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolderRoot viewHolderRoot = null;
        ViewHolderChild viewHolderChild = null;
        int itemType = getItemViewType(position);

        if (convertView == null) {
            switch (itemType) {
                case TYPE_R:
                    convertView = LayoutInflater.from(context).inflate(R.layout.root_list_item, parent, false);
                    viewHolderRoot = new ViewHolderRoot();
                    viewHolderRoot.tvRootName = convertView.findViewById(R.id.tvRootName);
                    viewHolderRoot.checkBox = convertView.findViewById(R.id.checkBox);

                    convertView.setTag(viewHolderRoot);
                    break;
                case TYPE_C:
                    convertView = LayoutInflater.from(context).inflate(R.layout.child_list_item, parent, false);
                    viewHolderChild = new ViewHolderChild();

                    viewHolderChild.tvChildName = convertView.findViewById(R.id.tvChildName);
                    viewHolderChild.image = convertView.findViewById(R.id.image);

                    convertView.setTag(viewHolderChild);
                    break;
            }


        } else {

            switch (itemType) {
                case TYPE_R:
                    viewHolderRoot = (ViewHolderRoot) convertView.getTag();
                    break;
                case TYPE_C:
                    viewHolderChild = (ViewHolderChild) convertView.getTag();
                    break;
            }
        }
        HashMap<String, String> hs = listData.get(position);

        switch (itemType) {
            case TYPE_R:
                viewHolderRoot.tvRootName.setText(hs.get("rootName"));
                break;
            case TYPE_C:
                viewHolderChild.tvChildName.setText(hs.get("childName"));
                viewHolderChild.image.setBackgroundResource(R.mipmap.ic_launcher);
                break;
        }


        return convertView;
    }

同事对于不同布局使用不同的ViewHolder

static class ViewHolderRoot {
        TextView tvRootName;
        CheckBox checkBox;
    }

    static class ViewHolderChild {
        TextView tvChildName;
        ImageView image;
    }
完整代码 点击打开链接


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值