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 | +=================+ +=================+
- Android smoothScrollTo no invocando onScrollStateChanged
- WebView en Galería deteniendo eventos de desplazamiento / toque
- Android infinita rejilla de desplazamiento, el adaptador tiene que crecer indefinidamente?
- Cómo agregar EditText en listview y obtener su valor dinámicamente en todas las filas?
- Limitar el número de líneas en TextView
- Bloqueo de scroll de gridview
- Android View deja de recibir eventos táctiles cuando el padre se desplaza
- ¿Cómo obtener las flechas derecha / izquierda en Actividad para indicar más pantallas a la derecha / izquierda?
- Desplazamiento de imagen enriquecido y zoom en android
- Desplazamiento de un TextView a una línea específica
- Vista de cuadrícula personalizada con rango de fila y extensión de columna
- RecyclerView Adapter está repitiendo valores en lugares erróneos
- Fuerza de la pantalla WebView para dibujar
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; } });
- Java.lang.NullPointerException: println necesita un mensaje
- Configuración del elemento ListView marcado desde Adapter