需求:
-
list集合保存的对象中保存一个字段:
-
isTitle
:boolean类型,区别对象的种类,根据标记,加载不同布局
-
-
代码:
class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public AppInfo getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } //重点!!! @Override public int getViewTypeCount() { return 2; } //重点!!! @Override public int getItemViewType(int position) { AppInfo info = list.get(position); //获取每个条目的显示对象,返回每个条目的标志位 if (info.isTitle) { return TYPE_TITLE; } else { return TYPE_NORMAL; } } @Override public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position) == TYPE_NORMAL) { ViewHolder holder; if (convertView == null) { //加载一般布局 convertView = View.inflate(getApplicationContext(), R.layout.app_info_item, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } AppInfo info = getItem(position); holder.tvName.setText(info.name); holder.ivIcon.setImageDrawable(info.icon); holder.tvSize.setText(Formatter.formatFileSize(getApplicationContext(), info.size)); holder.tvLocation.setText(info.isSdcard ? "外置存储卡" : "手机内存"); } else { //加载标题布局 TextView tvTitle = null; if (convertView == null) { convertView = View.inflate(getApplicationContext(), R.layout.app_title_item, null); } tvTitle = (TextView) convertView.findViewById(R.id.title_item); AppInfo info = getItem(position); if (position == 0) { tvTitle.setText(info.title + "(" + userList.size() + ")"); } else { tvTitle.setText(info.title + "(" + systemList.size() + ")"); } } return convertView; } } static class ViewHolder { @BindView(R.id.iv_icon) ImageView ivIcon; @BindView(R.id.tv_name) TextView tvName; @BindView(R.id.tv_location) TextView tvLocation; @BindView(R.id.tv_size) TextView tvSize; ViewHolder(View view) { ButterKnife.bind(this, view); } }
加个多个不同布局时候,需要重写
getItemViewType
方法,根据返回值int类型,判断加载布局的类型需要重写
getViewTypeCount
,返回值为填充布局种类的个数-
自定义标志要从
0
开始private static final int TYPE_TITLE = 0; //标题栏类型 private static final int TYPE_NORMAL = 1; //一般布局