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í .

One Solution collect form web for “GroupPosition in ExpandableListView me da un valor equivocado”

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.

  • Implementar el divisor entre el último elemento del niño y el siguiente grupo de cabecera.
  • Animación para expandibleListView
  • ¿Cómo implementar el cajón de navegación androide expandible con subitems?
  • Botón en lista desplegable android
  • El divisor de Android ExpandableListView es invisible
  • Swipeleft para eliminar no funciona en la altura expandible listview
  • Android ExpandableListView largo grupo haga clic en el oyente evitar la expansión
  • Android: ¿Obtener el número de grupos en ExpandableListView?
  • GetChildView no se llama
  • ExpandableListView groupView checkbox unticking otras vistas de grupo
  • Comportamiento del selector de lista expandible de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.