ExpandableListView lista expandible no expandir cuando su altura es wrap contenido, y algo está por debajo de él

Aquí está mi código de diseño. Cuando hago clic en la vista de lista expandible no se expande. Sin embargo, si aumenta la altura de la lista se expande. ¿Hay una manera de aumentar la altura de la lista dinámicamente a través del código? ¿Puedo hacer que se expanda en el medio de mi diseño. Porque si aumenta la altura, sólo agregará espacio en blanco innecesario en la lista contraída.

Código:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.pocketcash.pocketcash.HomeActivity"> <Switch android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/detailedCashInfoSwitch" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:onClick="cashToggleSwitchClicked" android:text="Toggle Detailed Cash Info" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add cash" android:id="@+id/addCashButton" android:onClick="launchAddCash" android:layout_below="@+id/expandableListView2" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add expenditure" android:id="@+id/addExpenditureButton" android:layout_below="@+id/addCashButton" android:layout_centerHorizontal="true" android:layout_marginTop="25dp" android:onClick="launchAddExpenditure" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="Recent Logs:" android:id="@+id/recentLogsText" android:layout_below="@+id/addExpenditureButton" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="50dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/logText" android:layout_below="@+id/recentLogsText" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="0dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="(view all)" android:id="@+id/recentViewAllText" android:layout_alignTop="@+id/recentLogsText" android:layout_toRightOf="@+id/recentLogsText" android:layout_toEndOf="@+id/recentLogsText" android:layout_marginLeft="10dp" android:onClick="recentViewLogClicked" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="(view logs)" android:id="@+id/addViewAllText" android:layout_below="@+id/addCashButton" android:layout_centerHorizontal="true" android:onClick="addViewLogClicked" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="(view logs)" android:id="@+id/expenseViewAllText" android:layout_below="@+id/addExpenditureButton" android:layout_centerHorizontal="true" android:onClick="expenseViewLogClicked" /> <ImageView android:layout_width="100dp" android:layout_height="100dp" android:id="@+id/userImage" android:layout_below="@+id/detailedCashInfoSwitch" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_marginTop="34dp" android:background="@drawable/default_user" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Name" android:id="@+id/nameText" android:layout_alignTop="@+id/userImage" android:layout_toRightOf="@+id/userImage" android:layout_toEndOf="@+id/userImage" android:layout_marginLeft="25dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="logout" android:id="@+id/logoutText" android:layout_below="@+id/nameText" android:layout_alignLeft="@+id/nameText" android:layout_alignStart="@+id/nameText" android:clickable="true" android:onClick="logUserOut" /> <ImageButton android:layout_width="25dp" android:layout_height="25dp" android:id="@+id/settingsButton" android:layout_alignTop="@+id/nameText" android:layout_toRightOf="@+id/nameText" android:layout_toEndOf="@+id/nameText" android:background="@drawable/settingsicon" android:layout_marginLeft="25dp" android:onClick="launchSettingsActivity" /> <fragment android:layout_width="wrap_content" android:layout_height="wrap_content" android:name="com.pocketcash.pocketcash.CurrentBalanceInfoFragment" android:id="@+id/fragment_currentBalanceInfo" android:layout_below="@+id/userImage" android:layout_centerHorizontal="true" tools:layout="@layout/fragment_current_balance_info" /> <ExpandableListView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/expandableListView2" android:layout_below="@+id/fragment_currentBalanceInfo" android:layout_centerHorizontal="true" android:clickable="true" /> </RelativeLayout> </ScrollView> 

Como Romain Guy (ingeniero de Google trabaja en UI toolkit) dijo en su puesto

Al establecer el ancho en wrap_content le está diciendo a ListView que sea tan amplio como el más ancho de sus hijos. ListView debe medir sus elementos y obtener los elementos que tiene que llamar a getView() en el adaptador. Esto puede ocurrir varias veces dependiendo del número de pases de diseño, el comportamiento del diseño de los padres, etc.

Por lo tanto, si establece el ancho de diseño o la altura de diseño de ListView en wrap_content ListView intentará medir cada vista que se adjunte a ella, lo que definitivamente no es lo que desea.

Tenga en cuenta: evite establecer wrap_content para ListViews o GridViews o ExpandableListView en todo momento, para más detalles vea este video de E / S de Google hablando sobre el mundo de listview

Hacer tan ExpandableListView a match_parent

Después de mucha investigación sobre este tema, sólo podía llegar a la conclusión de que un objeto desplazable como el listview extensible no se puede declarar dentro de otra vista desplazable. Sin embargo i tweaked alrededor con mi código de Java un poco para resolver este problema durante runtime.

  expListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { int height = 0; for (int i = 0; i < expListView.getChildCount(); i++) { height += expListView.getChildAt(i).getMeasuredHeight(); height += expListView.getDividerHeight(); } expListView.getLayoutParams().height = (height+6)*10; } }); // Listview Group collapsed listener expListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { expListView.getLayoutParams().height = 61; } }); 

De esta manera ajusté la altura del widget de forma dinámica cuando se expandió o se derrumbó. No es un método confiable y funciona en éxito y el juicio por lo que en última instancia, tuvo que mover este widget a una actividad completamente nueva. Sin embargo, esto funcionó sin problemas. Pero si alguien encuentra una mejor respuesta, por favor comparta.

  • Android: ¿cómo usar los colores del tema actual en un xml extraíble?
  • Cómo configurar un diseño de menú principal en Android?
  • Creación de estilos-v21.xml
  • Creación de un menú de diálogo emergente personalizado
  • Android ¿Es posible definir un mapa en un archivo XML?
  • ¿Cómo obtengo el efecto de rizo para los elementos de menú en mi barra de herramientas personalizada?
  • EditText oculto por el teclado cuando android: gravity = "center" - Android
  • ¿Cómo cambiar el tema de color de la aplicación Android?
  • Archivo de preferencias del usuario vs Archivo de preferencias de la aplicación
  • Dibujar círculo mediante programación utilizando Android ShapeDrawable
  • NullPointerException lanzado en Eclipse al intentar abrir la vista de Android XML?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.