Android listView 中嵌套不同的item

原创 2015年11月18日 16:18:12

在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;
}

Android listview设置多个不同的item样式

原文: http://blog.csdn.net/lllkey/article/details/9093107 实现代码 Adapter的代码 其中:ViewHolder分别是三个不同的布局...

Android ListView 不同类型item展示

  • 2017年06月21日 16:02
  • 23.36MB
  • 下载

android Listview的getView和convertview原理解析以及使用不同的item布局(二)

博主工作了几年,也用了几年的ListView等AdapterView控件,但关于Adapter的一些问题并没有深入下去,终于有时间学习总结下关于BaseAdapter的一些较深入的话题。本文涉及三个话...

android 关于listview中不同item的布局

上次我写了一篇关于自定义的HorizontalScrollView和viewpager类似tab的滑动,截图下面有listview的不同的item布局,就是在getview方法里选择type类型。如图...

android listview item 加载不同的布局样式文件

listview在加载不同的样式文件的时候,listview会有不同的样式布局显示,此时个人的经验使用实例: import java.util.ArrayList; import ...

Android为ListView的Item设置不同的布局

Adapter的getViewTypeCount和getItemViewType Android为ListView的Item设置不同的布局你需要做这些: 1 getViewTypeCount()和g...

Android ListView加载两种不同的item

有时候当我们使用ListView组件时,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android listView 中嵌套不同的item
举报原因:
原因补充:

(最多只允许输入30个字)