Android ExpandableListView no se expande / no se puede hacer clic

Soy bastante nuevo en la programación de android y traté de implementar un listview extensible básico que muestra una lista de cursos que deben mostrar algunos detalles adicionales cuando se hace clic. Me siento como el problema es muy básico, ya que no incluyen nada extravagante en cualquiera de las vistas, pero todavía no podía encontrar una solución en línea, la mayoría de las otras preguntas son mucho más específicos.

La primera parte funciona bien (mostrando la lista de cursos), el problema es que la lista no es clicable, lo que significa que no se expande.

Lo que he determinado ahora es el siguiente:
1. el getChildView nunca se llama (depurador nunca se detiene en punto de interrupción)
2. hay datos para los niños, ya que es el mismo dato que se utiliza para el groupheading que funciona bien.

También he intentado fijar un onGroupClickListener que nunca fue llamado, así que lo quité otra vez.

mi código:

Presentación del encabezado de grupo:

<TextView android:id="@+id/CourseName" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="bottom" android:text="CourseName" android:layout_weight="7" android:layout_marginRight="25dp" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/CourseDate" android:layout_width="0dp" android:layout_height="wrap_content" android:gravity="bottom" android:layout_weight="3" android:text="CourseDate" /> <CheckBox android:id="@+id/checkBox" style="?android:attr/starStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> 

Diseño child_row:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toRightOf="@+id/button1" android:text="Button" /> <TextView android:id="@+id/phases" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:gravity="center" android:layout_below="@+id/button1" android:text="phases:" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_below="@+id/phases" android:gravity="center" android:text="information:" /> </RelativeLayout> 

Disposición de la actividad:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/sportName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:gravity="center" android:text="Sport Name" android:textAppearance="?android:attr/textAppearanceLarge" android:textSize="@dimen/profile_title" /> <RatingBar android:id="@+id/ratingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:numStars="5" android:stepSize="1" android:layout_centerInParent="true" /> <ExpandableListView android:id="@+id/expandableListView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_below="@+id/sportName" > </ExpandableListView> </RelativeLayout> 

Adaptador java:

 package ch.unibe.unisportbern.views.details; import java.util.ArrayList; import com.example.unisportbern.R; import ch.unibe.unisportbern.support.Course; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; public class SportsAdapter extends BaseExpandableListAdapter { private Context context; private ArrayList<Course> courseList; public SportsAdapter(Context context, ArrayList<Course> courseList) { this.context = context; this.courseList = courseList; } @Override public Object getChild(int index, int stub) { return courseList.get(index); } @Override public long getChildId(int index, int stub) { return stub; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null){ LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.child_row, null); } TextView phases = (TextView) convertView.findViewById(R.id.phases); TextView info = (TextView) convertView.findViewById(R.id.info); phases.setText("phases:\n" + courseList.get(groupPosition).getPhases()); info.setText(courseList.get(groupPosition).getInformation()); return convertView; } @Override public int getChildrenCount(int groupPosition) { return 1; } @Override public Object getGroup(int groupPosition) { return courseList.get(groupPosition); } @Override public int getGroupCount() { return courseList.size(); } @Override public long getGroupId(int groupPosition) { return courseList.get(groupPosition).getId(); } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inf = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inf.inflate(R.layout.group_heading, null); } TextView courseName = (TextView) convertView.findViewById(R.id.CourseName); TextView courseDate = (TextView) convertView.findViewById(R.id.CourseDate); courseName.setText(courseList.get(groupPosition).getName()); courseDate.setText(courseList.get(groupPosition).getDay() + courseList.get(groupPosition).getTime()); return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } 

Actividad java:

 package ch.unibe.unisportbern.views.details; import java.util.ArrayList; import com.example.unisportbern.R; import ch.unibe.unisportbern.support.Course; import ch.unibe.unisportbern.support.DBMethodes; import ch.unibe.unisportbern.support.Sport; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ExpandableListView; public class DActivity extends Activity{ public final static String NAME = "SportName"; public final static String ID = "SportID"; private Sport sport; private ArrayList<Course> courses; private SportsAdapter sportsadapter; private ExpandableListView myList; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); getSport(); getCourses(); setContentView(R.layout.details_layout); myList = (ExpandableListView) findViewById(R.id.expandableListView); sportsadapter = new SportsAdapter(this, courses); myList.setAdapter(sportsadapter); } private void getCourses() { DBMethodes dbMethodes = new DBMethodes(this); try { courses = dbMethodes.getAllCourses(sport); } catch (Exception e) { } } private void getSport() { Intent intent = this.getIntent(); int id = intent.getIntExtra(ID, 0); String name = intent.getStringExtra(NAME); this.sport = new Sport(id, name); } } 

¡Muchas gracias por adelantado!

EDIT: lo encontré por casualidad. La casilla de verificación dentro del grupo se enfocaba, robando todos los clics de la lista. Para resolver este problema simplemente establece el atributo focusable de la casilla de verificación / botón en su lista a false.

Lo encontré por casualidad. La casilla de verificación dentro del grupo se enfocaba, robando todos los clics de la lista. Para resolver este problema simplemente establece el atributo focusable de la casilla de verificación / botón en su lista a false con cualquiera de los siguientes:

Checkbox.setFocusable (false); En java o android: focusable = "false"

Yo estaba frente a la misma cuestión, pero lo que he añadido la línea de abajo a mi vista padre

 android:descendantFocusability="blocksDescendants" 

Y funcionó para mí.

  • Barra de búsqueda personalizada con los bordes cortados
  • Cargar HTML estático en Webview
  • El fondo de la vista ampliable se vuelve negro cuando se amplía
  • ¿Cómo usar correctamente setZOrderMediaOverlay en Android?
  • ¿Hay una manera de desplazarse mediante programación una vista de desplazamiento a un texto de edición específico?
  • Altura dinámica de Android ExpandableListView
  • Vista de visualización en la parte superior de la barra de acción
  • Manejo de la rotación de la pantalla en WebView
  • Android spinner cerrar
  • Ocultar vista de grupo en Lista expandible
  • Android WebView no sólo de vídeo audio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.