ListView多条目简单使用以及会遇到的错误

ListView的多条目展示,需要手动重写2个方法:getItemViewType和getViewTypeCount()方法.
getItemViewType是获取具体的某个索引值下的条目的类型,
@Override
public int getItemViewType(int position) {
if(position % 2 ==0){
return TYPE1;
}else{
return TYPE2;
}
}
getViewTypeCount()是获取ListView条目类别的个数。
@Override
public int getViewTypeCount() {
return 2;
}
自己定义的两个样式常量,注意从零开始。
private static final int TYPE1 = 0;
private static final int TYPE2 = 1;
这里如果不从零开始会报一个异常,我给大家摘要一下:
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.widget.AbsListView$RecycleBin.scrapActiveViews(AbsListView.java:6798)
这个异常的原因就是getItemViewType 范围 0 - count-1 。

    **下面看下getView中如何实现的:**
    //获取样式类型
    int type = getItemViewType(position);
    //判断
    switch (type){
    //第一个布局
        case TYPE1 :
            if(convertView == null){
                convertView = View.inflate(context , R.layout.item1,null);
                vh1 = new ViewHolder1(convertView);
            }else{
                vh1 = (ViewHolder1) convertView.getTag();
            }
            //设置内容
            vh1.setDatas(getItem(position));
            break;
            //第二个布局
        case TYPE2 :
            if(convertView == null){
                convertView = View.inflate(context,R.layout.item2,null);
                vh2 = new ViewHolder2(convertView);
            }else{
                vh2 = (ViewHolder2) convertView.getTag();
            }
            //设置内容
            vh2.setDatass(getItem(position));
            break;
    }
    return convertView;
}
public class ViewHolder1 {
    ImageView imageView;
    TextView title;
    TextView id;
    public ViewHolder1 (View itemView){
        imageView = itemView.findViewById(R.id.image1_l);
        title = itemView.findViewById(R.id.title1_l);
        id = itemView.findViewById(R.id.id1_l);
        itemView.setTag(this);
    }
    private void setDatas(DataItem item) {
        title.setText(item.getTitle());
        id.setText(item.getId());
    }
}
public class ViewHolder2{
    TextView title2;
    public ViewHolder2 (View itemView) {
        title2 = itemView.findViewById(R.id.title2_l);
        itemView.setTag(this);
    }
    public void setDatass (DataItem dataItem){
        title2.setText(dataItem.getTitle());
    }
}
主要就是上面一些带有文字标识的代码块,其他的和ListView无差异。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值