Dans ma liste ExpandableListView, j'ai une liste de planètes en tant que groupes, et je veux qu'un de ces groupes disparaisse lorsqu'un CheckBox de l'activité principale est cochée. Malheureusement, cela se produit:Comment masquer un groupe spécifique dans ExpandableListView à l'aide de CheckBox
Voici le code qui affecte la visibilité de la vue. Comme vous pouvez le voir, je mets 1 comme int pour 'groupPosition' donc la vue qui est cachée devrait être Saturne et non Jupiter et le résultat est le même quelle que soit la valeur de 'groupPosition'.
final MyAdapter myAdapter = new MyAdapter(this, headings, childList);
expandableListView.setAdapter(myAdapter);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(checkBox.isChecked()){
myAdapter.getGroupView(1,false,findViewById(R.id.planet), expandableListView).setVisibility(View.GONE);
myAdapter.notifyDataSetChanged();
}
if(!checkBox.isChecked()){
myAdapter.getGroupView(1,false,findViewById(R.id.planet), expandableListView).setVisibility(View.VISIBLE);
myAdapter.notifyDataSetChanged();
}
}
});
Merci d'avance.
EDIT: Cela a fonctionné Kris, merci. Maintenant, comment puis-je appliquer efficacement ce filtre à l'un des childViews ici? (Les enfants sont HashMap) par exemple.
public void childFilter(int position, boolean filterCheck) {
planet_child_shown.clear();
String str;
if(!filterCheck) {
for (List<String> l : planet_child.values()) {
for (int i = 0; i < l.size(); i++) {
if (i!=position) {
str = l.get(i);
l.add(str);
}
}
}
}
notifyDataSetChanged();
}
J'essaie de filtrer une chaîne en fonction de sa position dans la liste <> ici et le remettre dans son propre « montré » HashMap> appelé planet_child_shown. Cela jette toujours un NullPointer cependant, et des points à ma méthode getChildrenCount() que je Modelé sur votre getGroupCount():
public int getChildrenCount(int groupPosition) {
return planet_child_shown == null ? 0 : planet_child_shown.get(mPlanetShown.get(groupPosition).name)
.size();
}
@Andrej si vous voulez bien mettre à jour votre question avec votre code d'adaptateur et votre code modèle (Planet), je vais mettre à jour ma réponse. Cela revient toujours à MVC. Le modèle doit contenir l'état de la liste extensible à un moment donné. L'adaptateur devrait avoir des méthodes pour changer le modèle où 'notifyDataSetChanged()' est appelé à la toute fin. –
Ouais j'ai laissé un commentaire accidentel ici, mais ma question a été éditée, merci :) –
Mis à jour ma réponse. En bref, l'adaptateur est responsable du suivi des groupes filtrés, et le modèle de groupe (Planet) a été chargé de suivre les enfants filtrés. –