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;
    }
完整代码 点击打开链接

 

猜你喜欢

转载自blog.csdn.net/u013359807/article/details/80449646