CheckBox indica en los hijos de ExpandableListView

He leído acerca de 30 páginas de SO, así como tutoriales sobre el seguimiento de los estados de verificación en las listas, pero la información (especialmente la información de trabajo) es escaso en hacerlo en un ListView ampliable.

Tengo los niños que pueblan con las casillas de verificación pero cuando compruebo una caja en un niño de 1 grupo, los niños al azar en otros grupos también comprueban. Necesito parar esto. La mejor información que creo que he leído fue para establecer la casilla de verificación como una etiqueta independiente, pero no sé cómo establecer varias etiquetas, cuando lo intenté, tengo un error de desajuste de clase comparando la casilla de verificación a la conversión.

¿Alguien se ha encontrado con una buena manera de realizar un seguimiento de los estados de la casilla de verificación en los hijos de una lista extensible?

He hecho varios cambios por lo que estoy poniendo en todo el código del adaptador. Por favor, compruebe las primeras líneas de getGroupView y todo getChildView y ayúdeme a ver qué estoy haciendo mal.

EDIT: Lo que está pasando ahora es que cuando compruebo una caja y luego expandir otro grupo, todas las casillas marcadas desmarque:

public class MyExpandableListAdapter extends BaseExpandableListAdapter implements OnCheckedChangeListener { private Context mContext; private ArrayList<ContactNameItems> mListDataHeader; private HashMap<String, List<ContactPhoneItems>> mListDataChild; private boolean[] mGetChecked; private HashMap<String, boolean[]> mChildCheckStates; private ArrayList<String> selectedNumbers; private ChildViewHolder childViewHolder; private GroupViewHolder groupViewHolder; private String numberText; public MyExpandableListAdapter(Context context, ArrayList<ContactNameItems> listDataHeader, HashMap<String, List<ContactPhoneItems>> listDataChild, ArrayList<String> listOfNumbers) { mContext = context; mListDataHeader = listDataHeader; mListDataChild = listDataChild; selectedNumbers = listOfNumbers; mChildCheckStates = new HashMap<String, boolean[]>(); } @Override public int getGroupCount() { return mListDataHeader.size(); } @Override public ContactNameItems getGroup(int groupPosition) { return mListDataHeader.get(groupPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { String contactName = getGroup(groupPosition).getName(); Bitmap contactImage = getGroup(groupPosition).getImage(); mGetChecked = new boolean[getChildrenCount(groupPosition)]; mChildCheckStates.put(contactName, mGetChecked); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.contact_name_item, null); groupViewHolder = new GroupViewHolder(); groupViewHolder.mContactName = (TextView) convertView .findViewById(R.id.lblListHeader); groupViewHolder.mContactImage = (ImageView) convertView .findViewById(R.id.ivContactPhoto); convertView.setTag(groupViewHolder); } else { groupViewHolder = (GroupViewHolder) convertView.getTag(); } if (contactImage != null) { groupViewHolder.mContactImage.setImageBitmap(contactImage); } else { groupViewHolder.mContactImage .setImageResource(R.drawable.default_contact); } groupViewHolder.mContactName.setText(contactName); return convertView; } @Override public int getChildrenCount(int groupPosition) { return mListDataChild.get(mListDataHeader.get(groupPosition).getName()) .size(); } @Override public ContactPhoneItems getChild(int groupPosition, int childPosition) { return mListDataChild.get(mListDataHeader.get(groupPosition).getName()) .get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String contactName = getGroup(groupPosition).getName(); final int mChildPosition = childPosition; numberText = getChild(groupPosition, childPosition).getNumber(); String typeText = getChild(groupPosition, childPosition).getPhoneType(); mGetChecked = mChildCheckStates.get(contactName); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) this.mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.contact_detail_item, null); childViewHolder = new ChildViewHolder(); childViewHolder.mPhoneNumber = (TextView) convertView .findViewById(R.id.tv_phone_number); childViewHolder.mPhoneType = (TextView) convertView .findViewById(R.id.tv_phone_type); childViewHolder.mCheckBox = (CheckBox) convertView .findViewById(R.id.checkBox); convertView.setTag(R.layout.contact_detail_item, childViewHolder); } else { childViewHolder = (ChildViewHolder) convertView .getTag(R.layout.contact_detail_item); } childViewHolder.mPhoneNumber.setText(numberText); childViewHolder.mPhoneType.setText(typeText); childViewHolder.mCheckBox.setChecked(mGetChecked[mChildPosition]); childViewHolder.mCheckBox.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { boolean isChecked = childViewHolder.mCheckBox.isChecked(); Log.d("Debug", "isChecked = " + String.valueOf(isChecked)); if (isChecked) { selectedNumbers.add(numberText); } else { selectedNumbers.remove(numberText); } childViewHolder.mCheckBox.setChecked(isChecked); mGetChecked[mChildPosition] = isChecked; mChildCheckStates.put(contactName, mGetChecked); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } @Override public boolean hasStableIds() { return false; } public ArrayList<String> getSelectedNumbers() { return selectedNumbers; } public final class GroupViewHolder { TextView mContactName; ImageView mContactImage; } public final class ChildViewHolder { TextView mPhoneNumber; TextView mPhoneType; CheckBox mCheckBox; } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // TODO Auto-generated method stub Log.d("Debug", "onCheckChangedListener : " + String.valueOf(isChecked)); } 

}

Veo que tiene un objeto selectedNumbers , ¿qué tipo de colección es esa? Podría tener más sentido tener un Mapa o Lista o alguna colección basada en algo más único, como el grupo y la posición del niño. Entonces usted puede hacer esto:

(EDIT: editado el código para asegurarse de que el checkedChangedListener no se dispara) (EDIT 2 basado en la actualización del OP): Probablemente no debería usar un mapa de cadenas a matrices booleanas. En su lugar pruebe esto. Es bastante similar, pero utiliza ints que será más infalible para comparar que las cuerdas

 ... HashMap<Integer, Integer> mCheckedStates; // assume initialized as you did ... childViewHolder.mPhoneNumber.setText(numberText); childViewHolder.mPhoneType.setText(typeText); childViewHolder.mCheckBox.setOnCheckedChangeListener(null); if (mCheckedStates.contains(groupPosition)) { int checkedChildren = mCheckedStates.get(groupPosition); if ((checkedChildren & (1 << childPosition)) == 1) { childViewHolder.mCheckBox.setChecked(true); } else { //Edit: Cannot rely on checkbox being false on Recycle, childViewHolder.mCheckBox.setChecked(false); } } childViewHolder.mCheckBox.setOnCheckedChangeListener(this); @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // get group and child positions if (isChecked) { if (mCheckedStates.contains(groupPosition)) { // I'm using a bitmap to keep resources low, but it's not necessary to do it this way int childmap = mCheckedStates.get(groupPosition); childmap += (1 << childPosition); mCheckedStates.put(groupPosition, childmap); } else { mCheckedStates.put(groupPosition, (1 << childPosition)); } } else { if (mCheckedStates.contains(groupPosition)) { int childmap = mCheckedStates.get(groupPosition); if (childmap == (1 << childPosition)) { mCheckedStates.remove(groupPosition); } else { childmap &= ~(1 << childPosition); mCheckedStates.put(groupPosition, childmap); } } } } 

}

AQUÍ ESTÁ LA SOLUCIÓN DE TRABAJO

Aceptar, aunque parece que hay un montón de sugerencias en Internet sobre las casillas de verificación en lista ampliable, ninguno había trabajado para mí. Pude conseguirlo trabajando con la ayuda de un manojo de gente, especialmente anddev84. Ahora no voy a afirmar que esto es perfecto o infalible. Sólo estoy diciendo que funciona para mí. He probado en 2 dispositivos y estoy muy contento con ella.

Así que he tomado mi código de trabajo, se redujo a sus partes esenciales y agregó un montón de comentarios útiles para que cualquiera que lo necesite puede hacerlo. Espero que funcione tan bien para usted como lo hace para mí. Disfrutar

 import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.annotation.SuppressLint; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; // Eclipse wanted me to use a sparse array instead of my hashmaps, I just suppressed that suggestion @SuppressLint("UseSparseArrays") public class MyExpandableListAdapter extends BaseExpandableListAdapter { // Define activity context private Context mContext; /* * Here we have a Hashmap containing a String key * (can be Integer or other type but I was testing * with contacts so I used contact name as the key) */ private HashMap<String, List<ExpListChildItems>> mListDataChild; // ArrayList that is what each key in the above // hashmap points to private ArrayList<ExpListGroupItems> mListDataGroup; // Hashmap for keeping track of our checkbox check states private HashMap<Integer, boolean[]> mChildCheckStates; // Our getChildView & getGroupView use the viewholder patter // Here are the viewholders defined, the inner classes are // at the bottom private ChildViewHolder childViewHolder; private GroupViewHolder groupViewHolder; /* * For the purpose of this document, I'm only using a single * textview in the group (parent) and child, but you're limited only * by your XML view for each group item :) */ private String groupText; private String childText /* Here's the constructor we'll use to pass in our calling * activity's context, group items, and child items */ public MyExpandableListAdapter(Context context, ArrayList<ExpListGroupItems> listDataGroup, HashMap<String, List<ExpListChildItems>> listDataChild) { mContext = context; mListDataGroup = listDataGroup; mListDataChild = listDataChild; // Initialize our hashmap containing our check states here mChildCheckStates = new HashMap<Integer, boolean[]>(); } @Override public int getGroupCount() { return mListDataGroup.size(); } /* * This defaults to "public object getGroup" if you auto import the methods * I always make a point to change it from "object" to whatever item * I passed through the constructor */ @Override public ExpListGroupItems getGroup(int groupPosition) { return mListDataGroup.get(groupPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // I passed a text string into an activity holding a getter/setter // which I passed in through "ExpListGroupItems". // Here is where I call the getter to get that text groupText = getGroup(groupPosition).getGroupText(); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.group_item, null); // Initialize the GroupViewHolder defined at the bottom of this document groupViewHolder = new GroupViewHolder(); groupViewHolder.mGroupText = (TextView) convertView.findViewById(R.id.groupTextView); convertView.setTag(groupViewHolder); } else { groupViewHolder = (GroupViewHolder) convertView.getTag(); } groupViewHolder.mGroupText.setText(groupText); return convertView; } @Override public int getChildrenCount(int groupPosition) { return mListDataChild.get(mListDataGroup.get(groupPosition).getMyText()).size(); } /* * This defaults to "public object getChild" if you auto import the methods * I always make a point to change it from "object" to whatever item * I passed through the constructor */ @Override public ExpListChildItems getChild(int groupPosition, int childPosition) { return mListDataChild.get(mListDataGroup.get(groupPosition).getMyText()).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final int mGroupPosition = groupPosition; final int mChildPosition = childPosition; // I passed a text string into an activity holding a getter/setter // which I passed in through "ExpListChildItems". // Here is where I call the getter to get that text childText = getChild(mGroupPosition, mChildPosition).getChildText(); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) this.mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.child_item, null); childViewHolder = new ChildViewHolder(); childViewHolder.mChildText = (TextView) convertView .findViewById(R.id.childTextView); childViewHolder.mCheckBox = (CheckBox) convertView .findViewById(R.id.checkBox); convertView.setTag(R.layout.child_item, childViewHolder); } else { childViewHolder = (ChildViewHolder) convertView .getTag(R.layout.child_item); } childViewHolder.mChildText.setText(childText); /* * You have to set the onCheckChangedListener to null * before restoring check states because each call to * "setChecked" is accompanied by a call to the * onCheckChangedListener */ childViewHolder.mCheckBox.setOnCheckedChangeListener(null); if (mChildCheckStates.containsKey(mGroupPosition)) { /* * if the hashmap mChildCheckStates<Integer, Boolean[]> contains * the value of the parent view (group) of this child (aka, the key), * then retrive the boolean array getChecked[] */ boolean getChecked[] = mChildCheckStates.get(mGroupPosition); // set the check state of this position's checkbox based on the // boolean value of getChecked[position] childViewHolder.mCheckBox.setChecked(getChecked[mChildPosition]); } else { /* * if the hashmap mChildCheckStates<Integer, Boolean[]> does not * contain the value of the parent view (group) of this child (aka, the key), * (aka, the key), then initialize getChecked[] as a new boolean array * and set it's size to the total number of children associated with * the parent group */ boolean getChecked[] = new boolean[getChildrenCount(mGroupPosition)]; // add getChecked[] to the mChildCheckStates hashmap using mGroupPosition as the key mChildCheckStates.put(mGroupPosition, getChecked); // set the check state of this position's checkbox based on the // boolean value of getChecked[position] childViewHolder.mCheckBox.setChecked(false); } childViewHolder.mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { boolean getChecked[] = mChildCheckStates.get(mGroupPosition); getChecked[mChildPosition] = isChecked; mChildCheckStates.put(mGroupPosition, getChecked); } else { boolean getChecked[] = mChildCheckStates.get(mGroupPosition); getChecked[mChildPosition] = isChecked; mChildCheckStates.put(mGroupPosition, getChecked); } } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return false; } @Override public boolean hasStableIds() { return false; } public final class GroupViewHolder { TextView mGroupText; } public final class ChildViewHolder { TextView mChildText; CheckBox mCheckBox; } } 

Yo también fue la víctima del mismo problema y probado su solución y ahora su funcionamiento como un encanto. Gracias amigo. 🙂

Acabo de modificar el código con cadena en lugar de modelo de dominio personalizado para la facilidad de otras personas.

MainActivity.java

 import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.Toast; public class MainActivity extends Activity { List<String> groupList; List<String> childList; Map<String, List<String>> laptopCollection; ExpandableListView expListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("-Test Exapansion-", "Nai Yara"); createGroupList(); createCollection(); expListView = (ExpandableListView) findViewById(R.id.laptop_list); final MyExpandableListAdapter expListAdapter = new MyExpandableListAdapter (getApplicationContext() , groupList, laptopCollection); expListView.setAdapter(expListAdapter); expListView.getHeaderViewsCount(); //expListView.expandGroup(1); //expListView.expandGroup(2); int numberOfHeaders = expListView.getExpandableListAdapter().getGroupCount(); Log.d("-Test Exapansion-", "Number of Groups are:"+numberOfHeaders); for(int i = 0; i<numberOfHeaders; i++){ expListView.expandGroup(i); } setGroupIndicatorToRight(); expListView.setOnChildClickListener(new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { final String selected = (String) expListAdapter.getChild( groupPosition, childPosition); Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG) .show(); return true; } }); } private void createGroupList() { groupList = new ArrayList<String>(); groupList.add("HP"); groupList.add("Dell"); groupList.add("Lenovo"); groupList.add("Sony"); groupList.add("HCL"); groupList.add("Samsung"); groupList.add("HTC"); } private void createCollection() { // preparing laptops collection(child) String[] hpModels = { "HP Pavilion G6-2014TX", "ProBook HP 4540", "HP Envy 4-1025TX" }; String[] hclModels = { "HCL S2101", "HCL L2102", "HCL V2002" }; String[] lenovoModels = { "IdeaPad Z Series", "Essential G Series", "ThinkPad X Series", "Ideapad Z Series" }; String[] sonyModels = { "VAIO E Series", "VAIO Z Series", "VAIO S Series", "VAIO YB Series" }; String[] dellModels = { "Inspiron", "Vostro", "XPS" }; String[] samsungModels = { "NP Series", "Series 5", "SF Series" }; String[] hTcModels = { "One", "One X", "Desire Series" }; laptopCollection = new LinkedHashMap<String, List<String>>(); for (String laptop : groupList) { if (laptop.equals("HP")) { loadChild(hpModels); } else if (laptop.equals("Dell")) loadChild(dellModels); else if (laptop.equals("Sony")) loadChild(sonyModels); else if (laptop.equals("HCL")) loadChild(hclModels); else if (laptop.equals("Samsung")) loadChild(samsungModels); else if (laptop.equals("HTC")) loadChild(hTcModels); else loadChild(lenovoModels); laptopCollection.put(laptop, childList); } } private void loadChild(String[] laptopModels) { childList = new ArrayList<String>(); for (String model : laptopModels) childList.add(model); } private void setGroupIndicatorToRight() { /* Get the screen width */ DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; expListView.setIndicatorBounds(width - getDipsFromPixel(35), width - getDipsFromPixel(5)); } // Convert pixel to dip public int getDipsFromPixel(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

MyExpandableListAdapter.java

 import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.Toast; public class MainActivity extends Activity { List<String> groupList; List<String> childList; Map<String, List<String>> laptopCollection; ExpandableListView expListView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("-Test Exapansion-", "Nai Yara"); createGroupList(); createCollection(); expListView = (ExpandableListView) findViewById(R.id.laptop_list); final MyExpandableListAdapter expListAdapter = new MyExpandableListAdapter(getApplicationContext() , groupList, laptopCollection); expListView.setAdapter(expListAdapter); expListView.getHeaderViewsCount(); int numberOfHeaders = expListView.getExpandableListAdapter().getGroupCount(); Log.d("-Test Exapansion-", "Number of Groups are:"+numberOfHeaders); for(int i = 0; i<numberOfHeaders; i++){ expListView.expandGroup(i); } setGroupIndicatorToRight(); expListView.setOnChildClickListener(new OnChildClickListener() { public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { final String selected = (String) expListAdapter.getChild( groupPosition, childPosition); Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG) .show(); return true; } }); } private void createGroupList() { groupList = new ArrayList<String>(); groupList.add("HP"); groupList.add("Dell"); groupList.add("Lenovo"); groupList.add("Sony"); groupList.add("HCL"); groupList.add("Samsung"); groupList.add("HTC"); } private void createCollection() { // preparing laptops collection(child) String[] hpModels = { "HP Pavilion G6-2014TX", "ProBook HP 4540", "HP Envy 4-1025TX" }; String[] hclModels = { "HCL S2101", "HCL L2102", "HCL V2002" }; String[] lenovoModels = { "IdeaPad Z Series", "Essential G Series", "ThinkPad X Series", "Ideapad Z Series" }; String[] sonyModels = { "VAIO E Series", "VAIO Z Series", "VAIO S Series", "VAIO YB Series" }; String[] dellModels = { "Inspiron", "Vostro", "XPS" }; String[] samsungModels = { "NP Series", "Series 5", "SF Series" }; String[] hTcModels = { "One", "One X", "Desire Series" }; laptopCollection = new LinkedHashMap<String, List<String>>(); for (String laptop : groupList) { if (laptop.equals("HP")) { loadChild(hpModels); } else if (laptop.equals("Dell")) loadChild(dellModels); else if (laptop.equals("Sony")) loadChild(sonyModels); else if (laptop.equals("HCL")) loadChild(hclModels); else if (laptop.equals("Samsung")) loadChild(samsungModels); else if (laptop.equals("HTC")) loadChild(hTcModels); else loadChild(lenovoModels); laptopCollection.put(laptop, childList); } } private void loadChild(String[] laptopModels) { childList = new ArrayList<String>(); for (String model : laptopModels) childList.add(model); } private void setGroupIndicatorToRight() { /* Get the screen width */ DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; expListView.setIndicatorBounds(width - getDipsFromPixel(35), width - getDipsFromPixel(5)); } // Convert pixel to dip public int getDipsFromPixel(float pixels) { // Get the screen's density scale final float scale = getResources().getDisplayMetrics().density; // Convert the dps to pixels, based on density scale return (int) (pixels * scale + 0.5f); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.activity_main, menu); return true; } } 

El problema es que utiliza posiciones como ids. La posición no es un id. Posición puede cambiar y la posición de un niño sin posición de grupo no es identificador único.

  1. Primero tienes que crear un nuevo HashMap para mantener al niño CheckBoxState en ExpandablelistView

  2. Declare HashMap en el adaptador como Like-

    Private HashMap mChildCheckStates // Nuevo HashMap creado

  3. Siguiendo el código pasado en su adaptador

     cb.setOnCheckedChangeListener(null); if (mChildCheckStates.containsKey(mGroupPosition)) { boolean getChecked[] = mChildCheckStates.get(mGroupPosition); cb.setChecked(getChecked[mChildPosition]); }else { boolean getChecked[] = new boolean[getChildrenCount(mGroupPosition)]; mChildCheckStates.put(mGroupPosition, getChecked); cb.setChecked(false); } cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { boolean getChecked[] = mChildCheckStates.get(mGroupPosition); getChecked[mChildPosition] = isChecked; mChildCheckStates.put(mGroupPosition, getChecked); //Toast.makeText(mContext,"group-"+mGroupPosition+"child-"+mChildPosition,Toast.LENGTH_SHORT).show(); // String value=mListDataChild[0]; Toast.makeText(mContext,"-"+mListDataChild,Toast.LENGTH_SHORT).show(); } else { boolean getChecked[] = mChildCheckStates.get(mGroupPosition); getChecked[mChildPosition] = isChecked; mChildCheckStates.put(mGroupPosition, getChecked); Toast.makeText(mContext,"group-"+mGroupPosition+"child-"+mChildPosition,Toast.LENGTH_SHORT).show(); } } }); 
  4. Cb es la casilla de verificación.

Espero que esta lógica me ayude a AnyOne gracias

  • Android ExpandableListActivity y SimpleCursorTreeAdapter?
  • GridView dentro de la lista expandible en android
  • ¿Cómo implementar el cajón de navegación androide expandible con subitems?
  • ExpandableListView expandir sólo en un botón específico?
  • ExpandableListView Animación de diapositivas en el grupo expand / collapse
  • EnhancedListView con ExpandableListView
  • ¿Cómo conseguir pegajoso / Pinned encabezados en un ExpandableListView?
  • Elementos en niveles múltiples ExpandableListView no siempre se puede hacer clic
  • Botón en lista desplegable android
  • Recuperar ChildItem de ExpandableListView?
  • GridView dentro de ExpandableListView con múltiples opciones en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.