Reputation: 125
Whenever I unchecked any one check box button then last one also being unchecked so I am confuse to understand that what is main issue. I think it is being recycled.
private ArrayList<MusterRollAttendanceMaster> list;
private LayoutInflater inflator;
private ViewHolder holder = null;;
public MusterGridAdapter(Activity context,
ArrayList<MusterRollAttendanceMaster> list) {
super(context, R.layout.row, list);
this.list = list;
inflator = context.getLayoutInflater();
}
@SuppressLint("ViewTag")
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflator.inflate(R.layout.row, null);
holder = new ViewHolder();
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.chk = (CheckBox) convertView.findViewById(R.id.checkbox);
holder.chk.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
int count = list.size();
boolean isAllChecked = true;
for (int i = 0; i < count; i++)
if (!(list.get(i).getSelected())) {
isAllChecked = false;
}
holder.chk.setChecked(isAllChecked);
}
});
holder.chk
.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton view,
boolean arg1) {
int getPosition = (Integer) view.getTag();
list.get(getPosition).setSelected(view.isChecked());
for (int i = 0; i < list.size(); i++) {
if (!list.get(i).getSelected())
checkBox_header.setChecked(false);
}
int p = 0;
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getSelected())
p++;
}
if (p == list.size())
checkBox_header.setChecked(true);
}
});
convertView.setTag(holder);
convertView.setTag(R.id.checkbox, holder.chk);
String part2;
holder.chk.setTag(position);
holder.jcn.setText(part2);
holder.chk.setChecked(list.get(position).isSelected());
return convertView;
}
public class ViewHolder {
private TextView jcn;
private TextView applicant;
private CheckBox chk;
}
public int getCount() {
count = list.size();
return count;
}
}
Upvotes: 0
Views: 39
Reputation: 1386
Save CheckBox
state in model class as boolean. When you change CheckBox
state(checked or unchecked) also change boolean value in model class and just call notifyDataSetChanged()
. It will make adapter know that you have changed the CheckBox
state. Happy Coding.
Upvotes: 0
Reputation: 697
Try doing something like this:
Dimension at top:
private ArrayList<String> checkedNames = new ArrayList<>();
In your inflate view:
if (checkedNames.contains(holder.chk.getText().toString()))
holder.chk.setChecked(true);
else
holder.chk.setChecked(false);
holder.chk.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
String name = buttonView.getText().toString(); //or declare your checkbox final
if (isChecked)
checkedNames.add(buttonView.getText().toString());
else
checkedNames.remove(buttonView.getText().toString());
}
});
and when inflating your listview item it should be:
convertView = inflator.inflate(R.layout.row, parent, false);
Upvotes: 0
Reputation: 78
Its problem specifically created by cell reusing of listview. Check the following link this will definitely help you
http://www.lalit3686.blogspot.in/2012/06/today-i-am-going-to-show-how-to-deal.html
Android Click on listItem checks wrong checkbox
Upvotes: 1