Desplazamiento automático en ExpandableListView

Me gustaría que mi ExpandableListView se desplazara automáticamente cuando el usuario expande un grupo, de modo que el encabezado de grupo expandido esté en la parte superior de la pantalla. He intentado smoothScrollToPosition , pero esto simplemente asegura que el grupo expandido esté visible en algún lugar de la pantalla. Me gustaría desplazarlo explícitamente para que el grupo expandido esté en la parte superior, como en este ejemplo:

 Before expanding Group 3: After expanding Group 3: +=================+ +=================+ | Group 1 | | Group 3 | +-----------------+ +-----------------+ | Group 2 | | Grp 3 Child 1 | +-----------------+ +-----------------+ | Group 3 | | Grp 3 Child 2 | +-----------------+ +-----------------+ | Group 4 | | Group 4 | +=================+ +=================+ 

 ListView.setSelection(position) 

esto se desplazará hasta el elemento seleccionado, llámelo cuando haga clic en el elemento de grupo.

El siguiente código es una solución que funcionó para mí

 public boolean onGroupClick(ExpandableListView parent, View v,int groupPosition, long id) { // TODO Auto-generated method stub //mExpandableList.setSelectionFromTop(groupPosition, 0); Boolean shouldExpand = (!mExpandableList.isGroupExpanded(groupPosition)); mExpandableList.collapseGroup(lastClickedPosition); if (shouldExpand){ //generateExpandableList(); mExpandableList.expandGroup(groupPosition); mExpandableList.setSelectionFromTop(groupPosition, 0); } lastClickedPosition = groupPosition; return true; } 

Esto funcionó para mí. Póngalo en su adaptador:

 public void onGroupExpanded(final int groupPosition) { super.onGroupExpanded(groupPosition); listView.setSelectedGroup(groupPosition); } 

Agregue este atributo android:transcriptMode="disabled" a su etiqueta ExpandibleListView desde xml. Esto debería funcionar.

Este esta trabajando para mi

 expandList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { if (!parent.isGroupExpanded(groupPosition)) { parent.expandGroup(groupPosition); } else { parent.collapseGroup(groupPosition); } parent.setSelectedGroup(groupPosition); return true; } }); 

Como la parte principal de trabajo para desplazamiento es

 parent.setSelectedGroup(groupPosition); 

Configuración de android:transcriptMode="disabled" a mi ExpandibleListView trabajado para mí también. Con el parámetro ajustado a "normal", ningún método funciona ( setSelectedGroup , setSelectionFromTop , etc).

Sólo setSmoothScroll funciona, pero no le gusta el efecto.

El siguiente código funciona para me.Hope que ayudará. Implece el OnGroupExpandListener en onGroupExpand utilizar el código a continuación

 public void onGroupExpand(final int groupPosition) { super.onGroupExpand(groupPosition); expandableListView.post(new Runnable() { @Override public void run() { expandableListView.setSelection(groupPosition); if(expandableListView.getChildAt(groupPosition)!=null) expandableListView.requestChildRectangleOnScreen(expandableListView.getChildAt(groupPosition), new Rect(0, 0, expandableListView.getChildAt(groupPosition).getRight(), expandableListView.getChildAt(groupPosition).getHeight()), false); } }); 

}

setSelectedGroup funciona, pero si desea tener un efecto de desplazamiento suave, use smoothScrollToPositionFromTop como se indica a continuación:

  expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { parent.smoothScrollToPositionFromTop(groupPosition,0); if (expandableListView.isGroupExpanded(groupPosition)) expandableListView.collapseGroupWithAnimation(groupPosition); else expandableListView.expandGroupWithAnimation(groupPosition); return true; } }); 
  • Vista de cuadrícula de desplazamiento horizontal
  • Vista de desplazamiento bidireccional
  • Mantener la posición de desplazamiento con cada actualización en la vista de lista
  • Android HorizontalScrollView con layout_gravity correcto trabajando mal
  • Android ListView actual ubicación de desplazamiento Y píxeles
  • Diseño del material layout_scrollFlags significado
  • Desplazamiento del índice de Android
  • Haga que las pestañas de ActionBar se desplacen cuando alcance límite, en lugar de crear una lista desplegable
  • Vista web de Android: detección de desplazamiento
  • ¿Cómo puedo tener un ListView dentro de un NestedScrollView
  • Smooth Scroll para GridView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.