Reputation: 343
I am using expandable listview in group parent level i am having checkbox
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder = new ViewHolder();
if(view == null){
LayoutInflater infalInflater = (LayoutInflater) this._context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// convertView = infalInflater.inflate(R.layout.home_activity_lv_sync_adapter, null);
view = infalInflater.inflate(R.layout.home_activity_lv_sync_adapter, null);
holder.ckupdate = (CheckBox) view.findViewById(R.id.ck_update);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
holder.ckupdate.setTag(groupPosition);
holder.ckupdate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position = (Integer) buttonView.getTag();
// objects.get(position).setChecked(buttonView.isChecked());
}
});
// holder.ckupdate.setChecked(isChecked(position));
return view;
}
But when i am scrolling exp list it changes state( i am not taking data from any list or DB just user check and unchecked )
thanks in advance
Upvotes: 0
Views: 933
Reputation: 91
Maybe its too late for this answer, but I think that this is simpler solution for this. Just try create new view every time (remove checking if view == null before that).
Instead of:
View view = convertView;
ViewHolder holder = new ViewHolder();
if(view == null){
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = infalInflater.inflate(R.layout.home_activity_lv_sync_adapter, null);
holder.ckupdate = (CheckBox) view.findViewById(R.id.ck_update);
view.setTag(holder);
} else {
holder = (RecyclerView.ViewHolder) view.getTag();
}
Try with this:
View view;
ViewHolder holder = new ViewHolder();
LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view =infalInflater.inflate(R.layout.home_activity_lv_sync_adapter,null);
holder.ckupdate =(CheckBox)view.findViewById(R.id.ck_update);
view.setTag(holder);
Also, there is no need for using holder for this parent view. You can use convertView instead.
Upvotes: 2
Reputation: 343
Hello i solved my problem by following
holder.ckupdate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int position = (Integer) buttonView.getTag();
if (isChecked) {
selectedStrings.add(position + " ");
ii.add(position);
} else {
selectedStrings.remove(position + "");
// ii.remove(position);
ii.removeAll(Arrays.asList(position));
}
System.out.println("selectedStrings!!!! " + selectedStrings);
for(int i=0;i<ii.size();i++)
{
System.out.println("HERE !! "+ii.get(i));
}
// objects.get(position).setChecked(buttonView.isChecked());
}
});
Upvotes: 0