I am making an application that is kind of like instagram and therefore loads images from the internet. The images loaded come from Parse.com's backend service. What I want to be able to do is load a lot of items in a listview and prevent the listview from reloading the image when it comes into view. Basically I don't want images to refresh,I want them to stay in the listview even as I scroll.
OnCreate MainActivity
imageCache = new BitmapLruCache();
imageLoader = new ImageLoader(Volley.newRequestQueue(getApplicationContext()), imageCache);
PostsAdapter
public class PostsAdapter extends BaseAdapter implements StickyListHeadersAdapter {
private Context context;
public List<PostList> postList;
public void add(PostList object,int position) {
postList.add(position,object);
}
public PostsAdapter(Context context) {
this.context=context;
postList = new ArrayList<PostList>();
}
public int getCount() {
return postList.size();
}
public PostList getItem(int position) {
return postList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.posts_list, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
holder.imageView.setImageUrl(null, imageLoader);
}
holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
postList.get(position).liked = isChecked;
}
});
holder.imageView.setOnClickListener(new DoubleClickListener(){
@Override
public void onSingleClick(View v) {
// TODO Auto-generated method stub
}
@Override
public void onDoubleClick(View v) {
// TODO Auto-generated method stub
holder.checkbox.setChecked(true);
postList.get(position).liked = true;
}
});
holder.checkbox.setChecked(postList.get(position).liked);
holder.imageView.setSoundEffectsEnabled(false);
holder.imageView.setImageUrl(postList.get(position).postPicture, imageLoader);
return convertView;
}
@Override
public View getHeaderView(int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
HeaderViewHolder HVH;
if(convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.post_header_list, null);
HVH = new HeaderViewHolder(convertView);
convertView.setTag(HVH);
}else{
HVH = (HeaderViewHolder)convertView.getTag();
}
CharSequence timeAgo = DateUtils.getRelativeTimeSpanString(
Long.parseLong(postList.get(position).user),
System.currentTimeMillis(), DateUtils.SECOND_IN_MILLIS);
HVH.username.setText(timeAgo);
return convertView;
}
@Override
public long getHeaderId(int position) {
// TODO Auto-generated method stub
return position;
}
}
public abstract class DoubleClickListener implements OnClickListener {
private static final long DOUBLE_CLICK_TIME_DELTA = 300;//milliseconds
long lastClickTime = 0;
@Override
public void onClick(View v) {
long clickTime = System.currentTimeMillis();
if (clickTime - lastClickTime < DOUBLE_CLICK_TIME_DELTA){
onDoubleClick(v);
} else {
onSingleClick(v);
}
lastClickTime = clickTime;
}
public abstract void onSingleClick(View v);
public abstract void onDoubleClick(View v);
}
static class ViewHolder{
NetworkImageView imageView;
CheckBox checkbox;
ViewHolder(View v){
imageView = (NetworkImageView )v.findViewById(R.id.Posts_Image);
checkbox = (CheckBox)v.findViewById(R.id.liked);