以前只写过单一类型的条目,今天学习了一下多类型条目的展示,为避免遗忘,为此在这里记录,写的解释都在代码里面,欢迎其他学习者学习参考:
private class MyAdapter extends BaseAdapter{
//获取数据设配器中条目类型的总数
@Override
public int getViewTypeCount() {
return super.getViewTypeCount()+1;//种类有两种
}
//指定索引指向的条目的类型(0代表复用系统)
@Override
public int getItemViewType(int position) {
if(position == 0 || position == mUserAppList.size() + 1){
//0代表纯文本条目
return 0;
}else{
//1代表文本条目+图片
return 1;
}
}
@Override
public int getCount() {
return mUserAppList.size()+mSystemAppList.size()+2;//加了用户和系统条目,故加2
}
@Override
public AppInfo getItem(int position) {
if(position < mUserAppList.size()){
return mUserAppList.get(position);
}
return mSystemAppList.get(position-mUserAppList.size());
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int type = getItemViewType(position);
if(type == 0){
//展示灰色条目
TextViewHolder viewHolder;
if(convertView == null){
viewHolder = new TextViewHolder();
convertView = View.inflate(getApplicationContext(), R.layout.app_list_item_title, null);
viewHolder.title = (TextView) convertView.findViewById(R.id.tv_app_list_title);
convertView.setTag(viewHolder);
}else{
viewHolder = (TextViewHolder) convertView.getTag();
}
if(position == 0){
viewHolder.title.setText("用户应用("+mUserAppList.size()+")");
}else{
viewHolder.title.setText("系统应用("+mSystemAppList.size()+")");
}
return convertView;
}else{
//正常条目
ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
convertView = View.inflate(getApplicationContext(), R.layout.app_list_item, null);
viewHolder.name = (TextView) convertView.findViewById(R.id.tv_app_name);
viewHolder.isSdcard = (TextView) convertView.findViewById(R.id.tv_app_location);
viewHolder.icon = (ImageView) convertView.findViewById(R.id.iv_app_icon);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
if(getItem(position).name==null){
viewHolder.name.setText(getItem(position).packageName);
}else{
viewHolder.name.setText(getItem(position).name);
}
if(getItem(position).isSdcard){
viewHolder.isSdcard.setText("sd卡应用");
}else{
viewHolder.isSdcard.setText("手机应用");
}
viewHolder.icon.setImageDrawable(getItem(position).icon);
return convertView;
}
}
private class ViewHolder{
public TextView name;
public TextView isSdcard;
public ImageView icon;
}
private class TextViewHolder{
public TextView title;
}
}