您的位置:首页 > 移动开发 > Android开发

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

2015-08-04 14:58 531 查看
大家都知道,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就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: