ListView显示不同布局


在使用不同布局的时候,getItemViewType和getViewType不能少,通常是不用这两个函数的重载的

 

   listView.setAdapter(new BaseAdapter() {
			
        	@Override
        	public int getViewTypeCount() {//例:3种类型的布局

        		return 3;
        	}
        	
        	@Override
        	public int getItemViewType(int position) { //该方法很重要。adapter内部会自己主动调用该方法。然后依据该类型得到缓存的view(可能为null),并传给getView方法//的convertView參数,假设该类型相应的view已被缓存过,则getView中的convertView就不为null
        		//返回的类型要小于getViewTypeCount(),否则会报数组越界
        		if (position==20||position==40||position==60) {
					return 1;
				}
        		if (position==25||position==45||position==65) {
        			return 2;
        		}
        		 
        		return 0;
        	}
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				// TODO Auto-generated method stub
				int type=getItemViewType(position);
				System.out.println("getView  "+position+"  "+convertView+"   "+type);
				if (convertView==null) {
					if (type==0) {
						TextView tv=new TextView(getApplicationContext());
						tv.setText(""+position);
						tv.setPadding(20, 20, 20, 20);
						tv.setTextColor(Color.BLACK);
						
						convertView=tv;
						
					}else if(type==1){
						TextView tv=new TextView(getApplicationContext());
						tv.setText(""+position);
						tv.setPadding(20, 10, 10, 10);
						tv.setTextColor(Color.BLACK);
						tv.setBackgroundColor(Color.GREEN);
						convertView=tv;
						
					}else{
						ImageView iv=new ImageView(getApplicationContext());
						iv.setImageResource(R.drawable.ic_launcher);
						convertView=iv;
					}
					 
				}
				switch (type) { //依据类型就能够大胆的强转了,不会抛异常的
					case 0:
						TextView tv=(TextView) convertView;
						tv.setText(""+position);
						break;
					case 1:
						  tv=(TextView) convertView;
						tv.setText(""+position);
						break;
					case 2:
						ImageView iv=(ImageView) convertView;
						 
						break;

				 
				}
				return convertView;
			}
			
			@Override
			public long getItemId(int position) {
				// TODO Auto-generated method stub
				return 0;
			}
			
			@Override
			public Object getItem(int position) {
				// TODO Auto-generated method stub
				return null;
			}
			
			@Override
			public int getCount() {
				// TODO Auto-generated method stub
				return 5000;
			}
		});
        
        
        
        //  为了验证getView的convertView參数是我们想要的view, 控件高度要高一些。保证同一屏不会出现两个绿色背景textview或imageview

        //能够看到20   25位置是第一次出现绿色背景textview和imagerview的位置,相应的convertView为null,40   45位置相应的convertView不为null。传进来的是已经缓存过的view


 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值