如何让Listview的item有不同样子

     之前替生燕做个小工具,为了方便,需要用到对不同item采取不同布局的listview,这对于我这个半吊子来说还是太难了。采取了很多方法,都没奏效,最多的情况是,偶发性地出现各种各样奇奇怪怪的布局。

     后来最初采取的解决方案是这样的,无论现在的item是否已经绘制出来,都重新绘制一遍。这样就可以保证该item是我们需要的item。但是缺点也很显而易见,就是严重耗费资源,跟listview的设计思想可谓南辕北辙。不过话说我们做个小工具,其实这种效率问题也可以打马虎眼过去。
        convertView ==  null ;
        convertView = mInflater.inflate(R.layout.item1,  null );
        holder =  new  ViewHolder();
        holder .textView = (TextView)convertView.findViewById(R.id.text );
大概就是上面那样子。

     但是本着闲着蛋疼的做人原则,我觉得有必要把真正的实现方法找出来。 http://www.cnblogs.com/xiaowenji/archive/2010/12/08/1900579.html。大概就是,
  1. 重(@Override)写 getViewTypeCount() – 返回你有多少个不同的布局
  2. 重写 getItemViewType(int) – 由position返回view type id
  3. 根据view item的类型,在getView中创建正确的convertView
     @Override
     public  int  getItemViewType( int  position) {
         return  mSeparatorsSet.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;
    }

     @Override
     public  int  getViewTypeCount() {
         return  TYPE_MAX_COUNT;
    }
     ........
         if  (convertView ==  null ) {
            holder =  new  ViewHolder();
             switch  (type) {
                 case  TYPE_ITEM:
                    convertView = mInflater.inflate(R.layout.item1,  null );
                    holder.textView = (TextView)convertView.findViewById(R.id.text);
                     break ;
                 case  TYPE_SEPARATOR:
                    convertView = mInflater.inflate(R.layout.item2,  null );
                    holder.textView = (TextView)convertView.findViewById(R.id.textSeparator);
                     break ;
            }
            convertView.setTag(holder);
        }  else  {
            holder = ( ViewHolder)convertView.getTag();
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值