• 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
    


     

  • 相关阅读:
    微信小程序之项目的创建
    Java中的线程--多线程面试题
    Java中的线程--并发库中的集合
    Java中的线程--线程中的工具
    Java中的线程--Lock和Condition实现线程同步通信
    Linux指定用户运行程序
    CPU、内存、磁盘三者的关系
    shell从字符串中提取子串(正则表达式)
    ssh登录失败的常见问题分析
    正则表达式匹配不含有某字符串的行
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7357539.html
Copyright © 2020-2023  润新知