You have to save the state of the ViewHolder. Then set the tag when convertView == null and get it in the else condition.
Check the way I did:
public class Conference_listViewAdapter extends ArrayAdapter {
Activity context;
LayoutInflater inflater;
public static List data = null;
ArrayList id_list = new ArrayList();
int pos;
public Conference_listViewAdapter(Activity context, List list, ArrayList id_list) {
super(context, R.layout.people_list_item1, list);
this.context = context;
this.data = list;
this.id_list = id_list;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.people_list_item1, null);
final ViewHolder holder = new ViewHolder();
holder.title = (TextView) view.findViewById(R.id.tv_name);
holder.image = (ImageView) view.findViewById(R.id.avtaar);
holder.favorite = (CheckBox) view.findViewById(R.id.fav);
view.setTag(holder);
holder.favorite.setTag(data.get(position));
holder.favorite.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Model element = (Model) holder.favorite.getTag();
element.setSelected(buttonView.isChecked());
}
});
} else {
view = convertView;
((ViewHolder) view.getTag()).favorite.setTag(data.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.favorite.setChecked(data.get(position).isSelected());
holder.title.setText(data.get(position).getName());
try {
holder.image.setImageBitmap(openPhoto(Long.valueOf(id_list.get(position))));
} catch (Exception e) {
e.printStackTrace();
}
return view;
}
static class ViewHolder {
protected TextView title;
protected CheckBox favorite;
ImageView image;
}