I have an expandablelistview with a checkbox by group and a checkbox by child.
when a group is checked/unchecked all the childs are checked/unchecked.I got no problem to with keep the state of this checkbox, but i want to force the expandableListView to redraw to show all the childs checkbox checked or unchecked immediately.
I search for hours and didn’t find solution.
Is anyone can explain me our to solve this problem, i ll be really glad.
here is the code where i manage the checkbox changes in my expandableListAdapter :
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder gholder;
final TypeVehicule type=(TypeVehicule) getGroup(groupPosition);
if (convertView==null)
{
gholder=new GroupViewHolder();
convertView = inflater.inflate(R.layout.listevehicule_type,null);
gholder.textViewGroup=(TextView)convertView.findViewById(R.id.LV_textType);
gholder.checkType=(CheckBox)convertView.findViewById(R.id.LV_CheckType);
gholder.checkType.setTag(groupPosition);
gholder.imgType=(ImageView)convertView.findViewById(R.id.LV_ImageType);
convertView.setTag(gholder);
}
else
{
gholder = (GroupViewHolder)convertView.getTag();
}
gholder.textViewGroup.setText(type.getType());
if (type.getColor()==-1)
{
int color;
Random rnd = new Random();
color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256));
type.setColor(color);
}
gholder.imgType.setBackgroundColor(type.getColor());
gholder.checkType.setChecked(type.isIschecked());
gholder.checkType.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
type.setIschecked(((CheckBox) v).isChecked());
for (Vehicule _v : type.getListeVehicules())
{
_v.setIschecked(type.isIschecked());
}
}
});
gholder.checkType.setChecked(type.isIschecked());
//
return convertView;
}
and the code of the onCreate :
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(net.ornicar.ornimobile.R.layout.listevehicule);
listView_Vehic = (ExpandableListView)findViewById(R.id.ListeVehicules);
// ici pour l'instant on rempli en dur en attendant l'implementation de la couche metier..
for (int i=1; i<10;i++)
{
TypeVehicule type = new TypeVehicule("Type " + i);
ArrayList<Vehicule> oListVeh = new ArrayList<Vehicule>();
for (int j=0;j<10;j++)
{
oListVeh.add(new Vehicule(type, "Veh N°"+j+"-"+i));
}
type.setListVehicule(oListVeh);
oListType .add(type);
}
ListeVehiculesAdapter adapter = new ListeVehiculesAdapter(this, oListType,true);
listView_Vehic.setAdapter(adapter);
this.registerForContextMenu(listView_Vehic);
listView_Vehic.setOnChildClickListener(new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
Toast.makeText(getApplicationContext(), oListType.get(groupPosition).getListeVehicules().get(childPosition).getNom()+" Clicked!!", 4000).show();
return true;
}
});
}
To force any (Expandable)ListView to redraw, you can call the notifyDataSetChanged on the Adapter used by the view. This will force a redraw on whatever is visible on screen. This means that your adapter must extend BaseAdapter or BaseExpandableListAdapter.