关闭

Android listView 中嵌套不同的item

标签: androidandroid listview加载不同的item
443人阅读 评论(0) 收藏 举报
分类:

在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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62792次
    • 积分:1372
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:9篇
    • 译文:0篇
    • 评论:4条
    最新评论