I have created a listview with textview and checkbox. However after scrolling the list down(or up) all the checked items in the list get unselected. How to make the checked
You can use this adapter class and get selected checkbox id by using listview.getPositionForView(cBox)
public class aAdapter extends SimpleAdapter {
//private List<Table> tables;
SharedPreferences prefs;
private Activity activity;
String val = "";
//@SuppressWarnings("unchecked")
public aAdapter(Activity context, List<? extends Map<String, String>> tables, int resource, String[] from,
int[] to) {
super(context, tables, resource, from, to);
//this.tables = (List<Table>) tables;
activity = context;
}
public View getView(final int position, final View convertView, ViewGroup parent) {
View row = super.getView(position, convertView, parent);
if (row == null)
{
LayoutInflater inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.reports_list, null);
}
final CheckBox cBox=(CheckBox)row.findViewById(R.id.cb1);
if(bulkflag)
{
cBox.setVisibility(View.VISIBLE);
}
else
{
cBox.setVisibility(View.GONE);
}
cBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if(cBox.isChecked())
{
//selectedIds.add(recIdArr.get(reportslistview.getPositionForView(cBox)));
System.out.println("position "+reportslistview.getPositionForView(cBox)+" Checked");
}
else
{
System.out.println("position "+reportslistview.getPositionForView(cBox)+" UnChecked");
}
}
});
return row;
}
}
ListView recycles the views every time it is scrolled. That's why the Check-boxes does not retain their states.
To accomplish your task:
That way your checkboxes will retain their states. I hope this is clear.
You need to save the state of your list when you make any changes in the list. You have to maintain an arrayList of your checkedItems. This Post might prove to be more helpful in this regard..