Android之ListView展示多类型的条目

以前只写过单一类型的条目,今天学习了一下多类型条目的展示,为避免遗忘,为此在这里记录,写的解释都在代码里面,欢迎其他学习者学习参考:

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;
		}
		
	}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值