listView (多布局)根据不同类型数据所设置不同布局

listView 在设置不同的布局时,需要获取不同的数据类型,根据不同的类型来判断所需布局的类型



public class MyAdapter extends BaseAdapter {
    private Context context;
    private List<NewsEntity.DataBean> datas;

设置图片缓存器(需要Volley)
    private ImageLoader imageLoader;

//获取布局
    private LayoutInflater inflater;


    public MyAdapter(Context context, List<NewsEntity.DataBean> datas) {
        this.context = context;
        this.datas = datas;
        inflater = LayoutInflater.from(context);
        imageLoader = new ImageLoader(MyApplication.getRequestQueue(),new MyImageCatche());
    }


    public void addData(List<NewsEntity.DataBean> dataBeanList){
        this.datas.addAll(dataBeanList);
        notifyDataSetChanged();
    }


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


    @Override
    public Object getItem(int i) {
        return datas.get(i);
    }


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

//获取类型的数量
    @Override
    public int getViewTypeCount() {
        return 2;
    }


//返回获得的数据类型,以便调整所需要的布局
    @Override
    public int getItemViewType(int position) {
        int type = Integer.parseInt(datas.get(position).getType());
        return type;
    }


    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

//获取类型
        int itemViewType = getItemViewType(i);
        View view1 = view;
        ViewHolder1 viewHolder1 = null;
        ViewHolder2 viewHolder2 = null;


        NewsEntity.DataBean dataBean = datas.get(i);




//通过获取的类型来调整布局,设置内容

        switch (itemViewType){
            case 0:
                if (view1 == null){
                    view1 = inflater.inflate(R.layout.layout_01,viewGroup,false);
                    viewHolder1 = new ViewHolder1(view1);
                    view1.setTag(viewHolder1);
                }else{
                    viewHolder1 = (ViewHolder1) view1.getTag();
                }


                viewHolder1.newsTitle.setText(dataBean.getTitle());
                viewHolder1.newsSummary.setText(dataBean.getSummary());
                ImageLoader.ImageListener imageListener = imageLoader.getImageListener(viewHolder1.newsImage,R.mipmap.ic_launcher,R.mipmap.ic_launcher);
                imageLoader.get(dataBean.getGroupthumbnail(),imageListener);
                break;
            case 1:
                if (view1 == null){
                    view1 = inflater.inflate(R.layout.layout_02,viewGroup,false);
                    viewHolder2 = new ViewHolder2(view1);
                    view1.setTag(viewHolder2);
                }else{
                    viewHolder2 = (ViewHolder2) view1.getTag();
                }


//Volley 的ImageLoader  用来缓存图片,设置图片
                ImageLoader.ImageListener imageListener1 = imageLoader.getImageListener(viewHolder2.adImage,R.mipmap.ic_launcher,R.mipmap.ic_launcher);


                imageLoader.get(dataBean.getGroupthumbnail(),imageListener1);


                break;
        }


        return view1;
    }




    class ViewHolder1{
        private ImageView newsImage;
        private TextView newsTitle;
        private TextView newsSummary;


        public ViewHolder1(View view) {
            this.newsImage = (ImageView) view.findViewById(R.id.news_image);
            this.newsTitle = (TextView) view.findViewById(R.id.news_title);
            this.newsSummary = (TextView) view.findViewById(R.id.news_summary);
        }
    }


    class ViewHolder2{
        private ImageView adImage;


        public ViewHolder2(View view){
            this.adImage = (ImageView) view.findViewById(R.id.news_ad);
        }
    }


//定义ImageCatche 实现Volley ImageLoader类中的ImageCatch内部类
    class MyImageCatche implements ImageLoader.ImageCache {
        private LruCache<String,Bitmap> lruCache;


        public MyImageCatche(){
            lruCache = new LruCache<String,Bitmap>((int) (Runtime.getRuntime().maxMemory()/8)){//最近最常使用缓存,构造 需要设置内存大小
                @Override
                protected int sizeOf(String key, Bitmap value) {
                    return value.getHeight()*value.getRowBytes(); //返回bitmap的内存大小(bitmap的宽*bitmap的高) ------  bitmap是通过图片的宽高来决定在内存中的大小,而不是图片的质量;
                }
            };
        }


        @Override
        public Bitmap getBitmap(String url) {//通过URL 获取缓存中的数据


            return lruCache.get(url);
        }


        @Override
        public void putBitmap(String url, Bitmap bitmap) { //将数据存到缓存中
            lruCache.put(url,bitmap);
        }
    }






}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值