I have a Simple Cursor Adapter which works fine and displays all the data. My listener changes the color on click:
listViewM.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
boolean exists = false;
TextView item = (TextView) view.findViewById(R.id.r_lv_name);
String selectedAnswer = item.getText().toString();
MultiSelection multiSelection = new MultiSelection((int) id, selectedAnswer);
for (MultiSelection mm : mMultiSelectionsArray) {
if (id == mm.getId()) {
mMultiSelectionsArray.remove(mm);
exists = true;
break;
} else {
exists = false;
}
}
if (!exists) {
mMultiSelectionsArray.add(multiSelection);
item.setTextColor(Color.parseColor("#2EFE2E"));
} else {
mMultiSelectionsArray.remove(multiSelection);
item.setTextColor(Color.parseColor("#000000"));
}
}
});
Now on scroll adapter is recycling views and marking new items as selected (by adding the color). I guess I need to keep status somehow and then apply it on view creation but after 3 days of looking I give up. Can anyone help please?
Try to use custom adapter, something like:
public class CustomSimpleCursorAdapter extends SimpleCursorAdapter {
public CustomSimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return super.newView(context, cursor, parent);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
super.bindView(view, context, cursor);
//HERE you can set the correct color for each item
TextView item = (TextView) view.findViewById(R.id.r_lv_name);
boolean exists = //check is item is selected
if (!exists) {
item.setTextColor(Color.parseColor("#2EFE2E"));
} else {
item.setTextColor(Color.parseColor("#000000"));
}
}
}