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