Android的ListView的每一个Item都有不同的布局

大家都知道,ListView中的数据是经过adapter适配到屏幕上的,所以要实现listview中每一个item的内容需要去操作adapter中的代码:

在使用不同布局的时候我们要重构以下两个方法:getItemViewType和getViewTypeCount.

public class MyAdapter extends BaseAdapter {
    ArrayList<String> ls;
    Context mContext;
    LinearLayout linearLayout = null;
    LayoutInflater inflater;
    TextView tex;
    final int VIEW_TYPE = 3;
    final int TYPE_1 = 0;
    final int TYPE_2 = 1;
    final int TYPE_3 = 2;

    public MyAdapter(ArrayList<String> list, Context context) {
        mContext = context;
        ls = list;
    }




    @Override
    public int getItemViewType(int position) {
        return super.getItemViewType(position);
    }

    @Override
    public int getViewTypeCount() {
        return 3;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder1 holder1 = null;
        ViewHolder2 holder2 = null;
        ViewHolder3 holder3 = null;
        int type = getItemViewType(position);
        if (convertView == null) {
            inflater = LayoutInflater.from(mContext);
            switch (type) {
                case TYPE_1:
                    convertView = inflater.inflate(R.layout.layout_item1, parent, false);
                    holder1 = new ViewHolder1();
                    holder1.tv1 = (TextView) convertView.findViewById(R.id.tv1);
                    convertView.setTag(holder1);
                    break;
                case TYPE_2:
                    convertView = inflater.inflate(R.layout.layout_item2, parent, false);
                    holder2 = new ViewHolder2();
                    holder2.tv2 = (TextView) convertView.findViewById(R.id.tv2);
                    convertView.setTag(holder2);
                    break;
                case TYPE_3:
                    convertView = inflater.inflate(R.layout.layout_item3,parent,false);
                    holder3 = new ViewHolder3();
                    holder3.tv3 = (TextView)convertView.findViewById(R.id.tv3);
                    convertView.setTag(holder3);
            }

        }else{
            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;
            }
        }
        switch (type){
            case TYPE_1:
                holder1.tv1.setText("我是第一个"+(position + 1));

                break;
            case TYPE_2:
                holder2.tv2.setText("我是第二个"+(position + 1));

                break;
            case TYPE_3:
                holder3.tv3.setText("我是三个"+(position + 1));

                break;
        }
        return convertView;

    }

    public static class ViewHolder1 {
        TextView tv1;
    }

    public static class ViewHolder2 {
        TextView tv2;
    }

    public static class ViewHolder3 {
        TextView tv3;
    }
}

创建不同的ViewHolder,通过调用返回的type类型来确定是哪一个item就可以了。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值