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


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.

  • Determina qué VISTA en varias vistas tiene gesto (doble clic, deslizar hacia la izquierda, deslizar hacia la derecha, etc.)?
  • Visualización preliminar en el grabador de medios android
  • YouTubePlayerFragment en ListView con AppCompatActivity Error
  • Android: EfficientAdapter con dos vistas diferentes
  • HasStableIds () en ListView expandible?
  • Android - Añadir dinámicamente vistas a la vista
  • Cómo establecer el atributo de primer plano en otra vista no FrameLayout
  • ¿Cómo puedo ocultar completamente el groupIndicator de un ExpandableListView?
  • 2 Solutions collect form web for “Android ExpandableListView no se expande / no se puede hacer clic”

    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í.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.