Android listView 中嵌套不同的item

在listview中嵌套不同的item,就要使用不同的ItmeHolder,根据要显示的不同来保存不同的itemholder (setTag)。

Listview中有3种Item布局,即使convertView缓存了一些布局,但是在重构时,根本不知道怎么样去让convertView返回你所需要的布局,这时你需要让adapter知道我当前有哪些布局,我重构Item时的布局选取规则,好让convertView能返回你需要的布局需要重写一下两个函数

@Override
public int getItemViewType(int position) {}
根据position来返回不同的int数据,从而加载不同的缓存布局

@Override
public int getViewTypeCount() {}
返回一共有多少种缓存布局的数量。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //三种itemHolder
    viewHolder1 holder1 = null;
    viewHolder2 holder2 = null;
    viewHolder3 holder3 = null;

//根据位置,判断是那种itemholder
    **int type = getItemViewType(position);**
    //无convertView,需要new出各个控件
    if(convertView == null)
    { 
        //按当前所需的样式,确定new的布局
        switch(type)
        {
        case TYPE_1:
            convertView = inflater.inflate(R.layout.listitem1, parent, false);
            holder1 = new viewHolder1();
            holder1.textView = (TextView)convertView.findViewById(R.id.textview1);
            holder1.checkBox = (CheckBox)convertView.findViewById(R.id.checkbox);
            Log.e("convertView = ", "NULL TYPE_1");
            convertView.setTag(holder1);
            break;
        case TYPE_2:
            convertView = inflater.inflate(R.layout.listitem2, parent, false);
            holder2 = new viewHolder2();
            holder2.textView = (TextView)convertView.findViewById(R.id.textview2);
            Log.e("convertView = ", "NULL TYPE_2");
            convertView.setTag(holder2);
            break;
        case TYPE_3:
            convertView = inflater.inflate(R.layout.listitem3, parent, false);
            holder3 = new viewHolder3();
            holder3.textView = (TextView)convertView.findViewById(R.id.textview3);
            holder3.imageView = (ImageView)convertView.findViewById(R.id.imageview);
            convertView.setTag(holder3);
            break;
        }
    }
    else
    {
    //有convertView,按样式,取得不用的布局
    switch(type)
    {
    case TYPE_1:
        holder1 = (viewHolder1) convertView.getTag();
        break;
    case TYPE_2:
        holder2 = (viewHolder2) convertView.getTag();
        break;
    case TYPE_3:
        holder3 = (viewHolder3) convertView.getTag();
        break;
    }
    }
    //根据不同的type,为各个界面设置资源
    switch(type)
    {
    case TYPE_1:
        holder1.textView.setText(Integer.toString(position));
        holder1.checkBox.setChecked(true);
        break;
    case TYPE_2:
        holder2.textView.setText(Integer.toString(position));
        break;
    case TYPE_3:
        holder3.textView.setText(Integer.toString(position));
        holder3.imageView.setBackgroundResource(R.drawable.icon);
        break;
    }
    return convertView;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值