package com.example.gp11_day10_news.adapter;
import java.lang.ref.SoftReference;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.example.gp11_day10_news.R;
import com.example.gp11_day10_news.asynctask.DownImageTask;
import com.example.gp11_day10_news.entity.News;
import com.example.gp11_day10_news.tool.Urls;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class NewsAdapter extends BaseAdapter {
private Context context;
private List<News> datas;
private ExecutorService es = Executors.newFixedThreadPool(2);
private Map<String,SoftReference<Bitmap>> imageCatche = new HashMap<String,SoftReference<Bitmap>>();
public NewsAdapter(Context context, List<News> datas) {
super();
this.context = context;
this.datas = datas;
}
@Override
public int getCount() {
int count = 0;
if(datas!=null)
count = datas.size();
return count;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
if(convertView==null)
{
convertView = LayoutInflater.from(context).inflate(R.layout.item_news, parent, false);
ViewHolder holder =new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.imageView);
holder.text_subject = (TextView) convertView.findViewById(R.id.text_subject);
holder.text_summary = (TextView) convertView.findViewById(R.id.text_summary);
holder.text_changed = (TextView) convertView.findViewById(R.id.text_changed);
convertView.setTag(holder);
}
ViewHolder holder = (ViewHolder) convertView.getTag();
News news = datas.get(position);
holder.text_subject.setText(news.getSubject());
holder.text_summary.setText(news.getSummary());
holder.text_changed.setText(news.getChanged());
String imageUrl = "http://litchiapi.jstv.com"+news.getCover();
holder.imageView.setTag(imageUrl);
holder.imageView.setImageResource(R.drawable.ic_launcher);
SoftReference<Bitmap> soft = imageCatche.get(imageUrl);
if(soft!=null)
{
Bitmap bitmap = soft.get();
if(bitmap!=null)
holder.imageView.setImageBitmap(bitmap);
else
downImage(imageUrl,parent);
}
else
downImage(imageUrl,parent);
return convertView;
}
public void downImage(final String imageUrl,final ViewGroup parent)
{
new DownImageTask(new DownImageTask.DownBack() {
@Override
public void response(String url, Bitmap bitmap) {
ImageView imageView = (ImageView) parent.findViewWithTag(url);
if (imageView != null)
imageView.setImageBitmap(bitmap);
imageCatche.put(url, new SoftReference<Bitmap>(bitmap));
}
}).executeOnExecutor(es, imageUrl);
}
class ViewHolder
{
ImageView imageView;
TextView text_subject,text_summary,text_changed;
}
}