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