Reputation: 2661
|default-Image | text| checkbox |
I'm able to save the checkbox status and maintain its state while scrolling the listview but I'm not able to fix the same bevahiour witht the imageview
here is my getvew()
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
viewHolder.imageview= (ImageView) convertView.findViewById(R.id.imageView1);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we get the position that we have set for the checkbox using setTag.
list.get(getPosition).setSelected(buttonView.isChecked()); // Set the value of checkbox to maintain its state.
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.label, viewHolder.text);
convertView.setTag(R.id.check, viewHolder.checkbox);
convertView.setTag(R.id.imageView1, viewHolder.imageview);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.checkbox.setTag(position); // This line is important.
viewHolder.imageview.setTag(position);
viewHolder.text.setText(list.get(position).getName());
viewHolder.checkbox.setChecked(list.get(position).isSelected());
// change the default-image here
if(list.get(position).getcontact_id()==5)
{
viewHolder.imageview.setImageResource(android.R.drawable.ic_dialog_map);
}
return convertView;
}
Upvotes: 0
Views: 854
Reputation: 28484
Try this way
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
if ((convertView == null) || (convertView.getTag() == null)) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.text = (TextView) convertView.findViewById(R.id.label);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.check);
viewHolder.imageview = (ImageView) convertView.findViewById(R.id.imageView1);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); // Here we
// get
// the
// position
// that
// we
// have
// set
// for
// the
// checkbox
// using
// setTag.
list.get(getPosition).setSelected(buttonView.isChecked()); // Set
// the
// value
// of
// checkbox
// to
// maintain
// its
// state.
}
});
viewHolder.checkbox.setTag(position); // This line is important.
viewHolder.imageview.setTag(position);
viewHolder.text.setText(list.get(position).getName());
viewHolder.checkbox.setChecked(list.get(position).isSelected());
// change the default-image here
if (list.get(position).getcontact_id() == 5) {
viewHolder.imageview.setImageResource(android.R.drawable.ic_dialog_map);
}
convertView.setTag(viewHolder);
return convertView;
}
Upvotes: 0
Reputation: 14590
I have also faced same problem like that..remove checking with convertview is null or not..
if (convertView == null) {}
try to inflate the view and set it..i have solved my problem like that..try it may work..
Upvotes: 1
Reputation: 14226
The problem is, that you are only updating the image when getcontact_id() == 5
if(list.get(position).getcontact_id() == 5) {
viewHolder.imageview.setImageResource(android.R.drawable.ic_dialog_map);
} else {
viewHolder.imageview.setImageResource(/* set some image here */);
}
Upvotes: 1