Listview多条目的简单使用

本文介绍了如何在ListView中实现多条目展示,包括创建不同布局、定义数据类型、初始化数据并添加类型属性、适配器中处理不同ViewType、创建ViewHolder及在getView方法中处理各种case。
摘要由CSDN通过智能技术生成

1.创建一个新的布局(需要几种布局创建几种)
2.新建一个类型的Type
3.initData();里重新去做一个判断,数据添加类型时,添加一个fourType属性
4.在适配器中把getViewTypeCount()里的数据添加一条即可
5.再创建一个ViewHolder
6.在getView方法里,在复制switch里的一个case,全部在增加一个即可

//设置三种类型,对应不同的类型的item
private static final int FirstType=0;
private static final int TwoType=1;
private static final int ThreeType=2;
private ListView listView;
private List<封装数据的类名> list;

String[] texts={"啊啊啊","嗷嗷嗷","哎哎哎","本宝宝","哟哟哟","啊啊啊"};
private int[] images = {R.drawable.jx_left_listitem_1, R.drawable.jx_left_listitem_5,
        R.drawable.jx_left_listitem_2, R.drawable.jx_left_listitem_3,
        R.drawable.jx_left_listitem_4, R.drawable.jx_left_listitem_5,
        };
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //查找控件
    listView=findViewById(R.id.listview);
    //初始化数据
    initData();
    //设置适配器
    MyAdapter myAdapter=new MyAdapter();
    listView.setAdapter(myAdapter);
}

/**
 * ListVIew多条目的Adapter,比普通的Adapter多了两个方法
 */
public class MyAdapter extends BaseAdapter {

    class ViewHolder1{
        TextView tv1;
    }
    class ViewHolder2{
        TextView tv2;
        ImageView iv2;
    }
    class ViewHolder3{
        TextView tv3;
        ImageView iv3;
    }
    @Override
    public int getCount() {
        return list.size();
    }

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder1 holder1 = null;
        ViewHolder2 holder2 = null;
        ViewHolder3 holder3 = null;
        //拿到ListVIew当前Item所对应数据的Type数据
        int type=getItemViewType(position);
        //存
        if (convertView==null){
            //根据类型创建viewholder
            switch (type){
                case FirstType:
                    holder1=new ViewHolder1();
                    convertView=View.inflate(MainActivity.this,R.layout.first_item,null);
                    holder1.tv1=convertView.findViewById(R.id.first_tv);
                    convertView.setTag(holder1);
                    break;
                case TwoType:
                    holder2=new ViewHolder2();
                    convertView=View.inflate(MainActivity.this,R.layout.two_item,null);
                    holder2.tv2=convertView.findViewById(R.id.two_tv);
                    holder2.iv2=convertView.findViewById(R.id.two_ivv);
                    convertView.setTag(holder2);
                    break;
                case ThreeType:
                    holder3=new ViewHolder3();
                    convertView=View.inflate(MainActivity.this,R.layout.three_item,null);
                    holder3.tv3=convertView.findViewById(R.id.three_tv);
                    holder3.iv3=convertView.findViewById(R.id.three_iv);
                    convertView.setTag(holder3);
                    break;
            }//取
        }else{
            switch (type){
                case FirstType:
                    holder1= (ViewHolder1) convertView.getTag();
                    break;
                case TwoType:
                    holder2 = (ViewHolder2) convertView.getTag();
                    break;
                case ThreeType:
                    holder3 = (ViewHolder3) convertView.getTag();
                    break;
            }
        }
        //设置数据类型
        switch (type) {
            case FirstType:
                DataBean dataBean = list.get(position);
                String text = dataBean.getText();
                holder1.tv1.setText(text);
                break;
            case TwoType:
                holder2.tv2.setText(list.get(position).getText());
                holder2.iv2.setImageResource(list.get(position).getImages());
                break;
            case ThreeType:
                holder3.tv3.setText(list.get(position).getText());
                holder3.iv3.setImageResource(list.get(position).getImages());
                break;
        }
        return convertView;
    }
    //返回listview所加载item的类型

    @Override
    public int getItemViewType(int position) {
        return list.get(position).getType();
    }

    @Override
    public int getViewTypeCount() {
        return 10;
    }
}
/**
 * 这里是因为没有多条目的类型,手动我分一下,分为三种类型
 */
private void initData() {
    list=new ArrayList<DataBean>();
    for (int x = 0; x < 10; x++) {
        DataBean data = new DataBean();
        //第一种类型的数据
        if (x % 2 == 0) {
            data.setType(FirstType);
            data.setText(texts[x]);
            //Log.d("位置" + x + "里面的数据" + data.toString());
        }//第二种类型的数据
        else if (x % 3 == 0) {
            data.setType(TwoType);
            data.setText(texts[x]);
            data.setImages(images[x]);
        }//第三种类型的数据
        else {
            data.setType(ThreeType);
            data.setText(texts[x]);
            data.setImages(images[x]);
        }
        list.add(data);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值