Android中Listview多条目

来源:互联网 发布:linux 查找文件命令 编辑:程序博客网 时间:2024/05/16 08:38

//拿一个平常的练习题  条目展示图片和文字  imageloadr加载网络图片

public class MyAdapter extends BaseAdapter {

    public List<DataBean.ItemBean> list = new ArrayList<DataBean.ItemBean>();
    public Context context;
    //加载不同布局对应的类型;自定义
    public final int TYPE_RIGHT = 0;
    public final int TYPE_LEFT = 1;
    public final int TYPE_TIME = 2;
    public ImageLoader loader;
    private DisplayImageOptions options;


    public MyAdapter(List<DataBean.ItemBean> list, Context context) {
        this.list = list;
        this.context = context;
        options = new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .cacheInMemory(true)
                .build();
        loader = ImageLoader.getInstance();
    }


    @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 int getItemViewType(int position) {
        //从list中取出对应position加载的数据;
        DataBean.ItemBean itemBean = list.get(position);
        //根据数据类型,返回不同的type
        if (itemBean.tag.equals("right")) {
            return TYPE_RIGHT;
        }
        if (itemBean.tag.equals("left")) {
            return TYPE_LEFT;
        }
        if (itemBean.tag.equals("time")) {
            return TYPE_TIME;
        }
        return 0;
    }


    @Override
    public int getViewTypeCount() {
        //返回listview加载几种布局;
        return 3;
    }


    @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) {
            switch (type) {
                case TYPE_LEFT:
                    convertView = View.inflate(context, R.layout.item_left_layout, null);
                    holder1 = new ViewHolder1(convertView);
                    convertView.setTag(holder1);
                    break;
                case TYPE_RIGHT:
                    convertView = View.inflate(context, R.layout.right_item_layout, null);
                    holder2 = new ViewHolder2(convertView);
                    convertView.setTag(holder2);
                    break;
                case TYPE_TIME:
                    convertView = View.inflate(context, R.layout.item_time_layout, null);
                    holder3 = new ViewHolder3(convertView);
                    convertView.setTag(holder3);
                    break;
                default:
                    break;
            }
        } else {
            switch (type) {
                case TYPE_LEFT:
                    holder1 = (ViewHolder1) convertView.getTag();
                    break;
                case TYPE_RIGHT:
                    holder2 = (ViewHolder2) convertView.getTag();
                    break;
                case TYPE_TIME:
                    holder3 = (ViewHolder3) convertView.getTag();
                    break;
                default:
                    break;
            }
        }


        //********第二步:给布局赋值,显示数据;
        DataBean.ItemBean itemBean = list.get(position);
        switch (type) {
            case TYPE_LEFT:
                DataBean.MessageBean left = (DataBean.MessageBean) itemBean.data;
                loader.displayImage(left.photo, holder1.left_item_img, options);
                holder1.left_item_name.setText(left.name);
                holder1.left_item_msg.setText(left.msg);
                break;
            case TYPE_RIGHT:
                DataBean.MessageBean right = (DataBean.MessageBean) itemBean.data;
                loader.displayImage(right.photo, holder2.left_item_img, options);
                holder2.left_item_name.setText(right.name);
                holder2.left_item_msg.setText(right.msg);
                break;
            case TYPE_TIME:
                DataBean.TimeBean time = (DataBean.TimeBean) itemBean.data;
                holder3.left_item_name.setText(time.time);
                break;
            default:
                break;
        }
        return convertView;
    }




    public static class ViewHolder1 {
        public View rootView;
        public ImageView left_item_img;
        public TextView left_item_name;
        public TextView left_item_msg;


        public ViewHolder1(View rootView) {
            this.rootView = rootView;
            this.left_item_img = (ImageView) rootView.findViewById(R.id.left_item_img);
            this.left_item_name = (TextView) rootView.findViewById(R.id.left_item_name);
            this.left_item_msg = (TextView) rootView.findViewById(R.id.left_item_msg);
        }


    }


    class ViewHolder2 {
        public View rootView;
        public TextView left_item_msg;
        public TextView left_item_name;
        public ImageView left_item_img;


        public ViewHolder2(View rootView) {
            this.rootView = rootView;
            this.left_item_msg = (TextView) rootView.findViewById(R.id.left_item_msg);
            this.left_item_name = (TextView) rootView.findViewById(R.id.left_item_name);
            this.left_item_img = (ImageView) rootView.findViewById(R.id.left_item_img);
        }


    }


    public static class ViewHolder3 {
        public View rootView;
        public TextView left_item_name;


        public ViewHolder3(View rootView) {
            this.rootView = rootView;
            this.left_item_name = (TextView) rootView.findViewById(R.id.left_item_name);
        }


    }
}
原创粉丝点击