Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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 WebView dentro de ScrollView solo desplaza scrollview
  • Android: onScrollStateChanged SCROLL_STATE_IDLE a veces no se dispara
  • Clase Android ImageViewer que admite Pinch-Zoom y desplazamiento
  • Android ListView alpha scroller para desplazamiento rápido de larga lista
  • RecyclerView - ¿Cómo suavizar desplazamiento a la parte superior del elemento en una posición determinada?
  • ¿Hay una manera de forzar un WebView para actualizar su imagen (vista), mientras se desplaza?
  • Vista de desplazamiento bidireccional
  • ¿Cómo trabajar, cuando listview dentro del scrollview?
  • 8 Solutions collect form web for “Desplazamiento automático en ExpandableListView”

     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; } }); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.