GroupPosition in ExpandableListView me da un valor equivocado

EDITAR

He encontrado la solución, por favor ver más abajo.

ORIGINAL:

He creado un ExpandableListView y se ve así:

  • Grupo 0 – niño 0, niño 1, niño 2
  • Grupo 1 – niño 0, niño 1, niño 2, niño 3
  • Grupo 2 – niño 0, niño 1, niño 2
  • Grupo 3 – niño 0, niño 1, niño 2, niño 3, niño 4

Cada vista de grupo tiene 3 ~ 5 vista de niño, y forzar para ampliar toda la vista de grupo,

 mExpandableListView = (ExpandableListView) mView.findViewById(R.id.expandable_list); CollectionExpandableListAdapter adapter = new MyExpandableListAdapter(getActivity(), mGroups, mProdChild); adapter.setInflater(LayoutInflater.from(getActivity().getBaseContext()), getActivity()); mExpandableListView.setAdapter(adapter); mExpandableListView.setGroupIndicator(null); for (int i = 0; i < groupList.size() - 1; i++) { mExpandableListView.expandGroup(i); } 

También, aquí está mi código del adaptador:

 public class MyExpandableListAdapter extends BaseExpandableListAdapter { private ArrayList<String> mGroupItem; private ArrayList<ProductListData> mTempChild = new ArrayList<ProductListData>(); private ArrayList<Object> mChildItem = new ArrayList<Object>(); private LayoutInflater mInflater; private Activity mActivity; private ImageLoader mImageLoader; public CollectionExpandableListAdapter(Activity context, ArrayList<String> grList, ArrayList<Object> childItem) { mGroupItem = grList; mChildItem = childItem; mActivity = context; mImageLoader = new ImageLoader(mActivity); } public void setInflater(LayoutInflater inflater, Activity activity) { mInflater = inflater; mActivity = activity; } @Override public ProductListData getChild(int groupPosition, int childPosition) { return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { mTempChild = (ArrayList<ProductListData>) mChildItem.get(groupPosition); if (convertView == null) { convertView = mInflater.inflate(R.layout.adapter_collection_row_child, null); } ... return convertView; } @Override public int getChildrenCount(int groupPosition) { return ((ArrayList<ProductListData>) mChildItem.get(groupPosition)).size(); } @Override public Object getGroup(int groupPosition) { return mGroupItem.get(groupPosition); } @Override public int getGroupCount() { return mGroupItem.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup arg3) { Log.d("LOG", "Group position : " + groupPosition); if (convertView == null) { convertView = mInflater.inflate(R.layout.group_row_layout, null); } ... return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int arg0, int arg1) { return false; } @Override public void onGroupCollapsed(int groupPosition) { super.onGroupCollapsed(groupPosition); } @Override public void onGroupExpanded(int groupPosition) { super.onGroupExpanded(groupPosition); } } 

Creación de un expandableListView funciona bien, pero sigo recibiendo valor 0 en getGroupView() cuando hago la lista. En mi logcat, esperaba ver groupPosition como 0, 1, 2, 3, 4.. (cuando desplazo hacia abajo), pero en realidad muestra 0, 0, 0, 1, 0, 2, 0, 3, 0, 4.. que tiene 0 adicional antes de cada groupPosition . Esto ocurre sólo en el primer desplazamiento, por lo que si me desplazo varias veces hacia arriba y hacia abajo, no mostrará un valor 0 adicional.

Lo busqué en Google y pasé mucho tiempo para depurarlo, pero no puedo encontrar ninguna solución. ¿Puede alguien ayudarme?

Solución

Mi problema estaba en el Layout de Listview . He cambiado layout_height a match_parent , y el error ha desaparecido! Encontré la solución aquí .

Tuve un problema similar una vez, obtener las opiniones equivocadas. No estoy seguro de si este es el caso aquí, pero lo que hice fue comentar / eliminar la línea:

 if (convertView == null) { 

tanto en el método getGroupView como en el método getChildView en el listadapter.

y de los correspondientes soportes rizados extremos.

Tiene algo que ver con las vistas de reutilización de listadapter para usar menos recursos del sistema al mostrar las vistas, pero hace más difícil administrar imo.

  • Rellene ExpandableListView con datos de SQLite
  • Multi-layered ExpandableListView
  • ¿Cómo implementar el cajón de navegación androide expandible con subitems?
  • ExpandableListView getChildrenCount no se llama después de los datos cambiados, dando lugar a IndexOutOfBoundsException
  • GridView dentro de la lista expandible en android
  • Enlace de datos de Android en una lista expandible
  • Contraer todo el grupo excepto el grupo seleccionado en el listview expandible android
  • Recuperar ChildItem de ExpandableListView?
  • CheckBox indica en los hijos de ExpandableListView
  • ¿Cómo puedo quitar el botón de ExpandableListView?
  • ¿Cómo comprobar si el grupo está expandido o colapsado en Android ExpandableListView?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.