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