ListView显示多种item

本文介绍了如何在Android中使用ListView来显示不同类型的item。通过适配器的重写方法,实现了多类型数据的展示,并提供了详细的代码示例及实际效果展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ListView显示多种item

适配器中重写以下两个方法

//item的状态数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }
//判断是哪一种状态
    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return TYPE_NEWS_1;
        } else {
            return TYPE_NEWS_2;
        }
    }

详细代码如下

public class MyAdapter extends BaseAdapter {

    private List<News> data;
    private Context mContext;
    //定义两种状态
    private static final int TYPE_NEWS_1 = 0;
    private static final int TYPE_NEWS_2 = 1;

    public MyAdapter() {
    }

    public MyAdapter(List<News> data, Context mContext) {
        this.data = data;
        this.mContext = mContext;
    }

    @Override
    public int getCount() {
        return data.size();
    }

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

    @Override
    public long getItemId(int position) {
        return position;
    }

    //item的状态数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }

    //判断是哪一种状态(此处只写了两个状态的,开发中根据不同item数量,根据不同参数判断选择哪个type)
    @Override
    public int getItemViewType(int position) {
        if (position % 2 == 0) {
            return TYPE_NEWS_1;
        } else {
            return TYPE_NEWS_2;
        }
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        //获取当前itam的状态
        int type = getItemViewType(position);

        ViewHolder holder = null;
        ViewHolder2 holder2 = null;
        if (convertView == null) {
            //根据状态 type判断,根据不同状态,绑定不同的 xml 文件.
            switch (type) {

                case TYPE_NEWS_1:

                    holder = new ViewHolder();
                    convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item_one, parent, false);
                    holder.img = convertView.findViewById(R.id.img);
                    holder.title = convertView.findViewById(R.id.title_tv);
                    holder.context = convertView.findViewById(R.id.context_tv);
                    convertView.setTag(holder);

                    break;

                case TYPE_NEWS_2:

                    holder2 = new ViewHolder2();
                    convertView = LayoutInflater.from(mContext).inflate(R.layout.listview_item_two, parent, false);
                    holder2.img = convertView.findViewById(R.id.img);
                    holder2.title = convertView.findViewById(R.id.title_tv);
                    holder2.context = convertView.findViewById(R.id.context_tv);
                    convertView.setTag(holder2);

                    break;

            }
        } else {
            switch (type) {

                case TYPE_NEWS_1:
                    holder = (ViewHolder) convertView.getTag();
                    break;

                case TYPE_NEWS_2:
                    holder2 = (ViewHolder2) convertView.getTag();
                    break;
            }
        }
        switch (type) {

            case TYPE_NEWS_1:
                holder.img.setBackgroundResource(data.get(position).getImg());
                holder.title.setText(data.get(position).getTitle());
                holder.context.setText(data.get(position).getContext());

                break;

            case TYPE_NEWS_2:

                holder2.img.setBackgroundResource(data.get(position).getImg());
                holder2.title.setText(data.get(position).getTitle());
                holder2.context.setText(data.get(position).getContext());

                break;

        }

        return convertView;
    }

    static class ViewHolder {

        ImageView img;
        TextView title;
        TextView context;

    }

    static class ViewHolder2 {
        ImageView img;
        TextView title;
        TextView context;
    }

}

效果图如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值