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

    xiaoxiao2023-03-24  4

    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);         }     } }

    转载请注明原文地址: https://ju.6miu.com/read-1202569.html
    最新回复(0)