Android ExpandableListView y onChildClick no funciona

He estado leyendo un montón de temas con el mismo problema que tengo, pero no puedo entender lo que está sucediendo. Tengo una vista de lista expandible, pero no puedo hacer que el onChildClickListener funcione. El onGroupClickListener está funcionando bien, pero realmente no lo necesito. Miré muchos ejemplos y todos parecen ser como los míos. Aquí está el código:

import android.app.Activity; import android.app.ExpandableListActivity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.widget.AdapterView; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ExpandableListView.OnGroupClickListener; import android.widget.ListView; import android.widget.Toast; import org.ektorp.CouchDbConnector; import org.ektorp.DbAccessException; import org.ektorp.android.util.EktorpAsyncTask; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.widget.TextView; public class MainActivity extends Activity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EktorpAsyncTask getUsersTask = new EktorpAsyncTask() { @Override protected void doInBackground() { //here i connect to de BD and fill the Group and Children arrays } @Override protected void onSuccess() { UserArrayExpandableAdapter adapter = new UserArrayExpandableAdapter(getApplicationContext(),parentsChilds.getParents(), parentsChilds.getChilds()); ExpandableListView expandableList = (ExpandableListView) findViewById(R.id.userview); expandableList.setAdapter(adapter); expandableList.setClickable(true); expandableList.setOnGroupClickListener(new OnGroupClickListener(){ @Override public boolean onGroupClick(ExpandableListView arg0, View arg1, int groupPosition, long arg3) { return false; } }); expandableList.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView arg0, View arg1, int arg2, int arg3, long arg4) { Toast.makeText(getBaseContext(), "Child clicked", Toast.LENGTH_LONG).show(); return false; } }); 

Vista del niño:

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="10dp" android:orientation="vertical" android:clickable="true" android:focusable="true"> <TextView android:id="@+id/day" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/DarkSeaGreen" android:paddingLeft="8dp" android:paddingBottom="4dp" android:textColor="@color/White" android:textSize="18sp" android:textStyle="bold" /> <RelativeLayout android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip" android:clickable="true" android:focusable="true"> <TextView android:id="@+id/subject" android:layout_width="fill_parent" android:layout_height="26dip" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:ellipsize="marquee" android:singleLine="true" android:textSize="12sp" /> <TextView android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical" android:textStyle="bold" android:textSize="16sp" /> </RelativeLayout> </LinearLayout> 

Distribución del grupo:

 <?xml version="1.0" encoding="UTF-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingBottom="5dp" > <TextView android:id="@+id/monthText" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:textSize="26sp" android:background="@color/SkyBlue" android:textColor="@color/White" android:textStyle="bold" /> </LinearLayout> 

Disposición MainActivity:

 <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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".LoginActivity" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <ExpandableListView android:id="@+id/userview" android:layout_width="match_parent" android:layout_height="wrap_content" > </ExpandableListView> </RelativeLayout> 

Código del adaptador:

 public class UserArrayExpandableAdapter extends BaseExpandableListAdapter { private final Context context; private final ArrayList<ArrayList<EventVO>> childs; private ArrayList<String> parents; public UserArrayExpandableAdapter(Context context, ArrayList<String> parents,ArrayList<ArrayList<EventVO>> childs) { this.context = context; this.childs = childs; this.parents = parents; } @Override public Object getChild(int arg0, int arg1) { return childs.get(arg0).get(arg1); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { List<EventVO> child = (ArrayList<EventVO>) childs.get(groupPosition); if (convertView == null){ LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.user_view, parent, false); } TextView nameView = (TextView) convertView.findViewById(R.id.name); TextView dateView = (TextView) convertView.findViewById(R.id.day); TextView subjectView = (TextView) convertView.findViewById(R.id.subject); nameView.setText(child.get(childPosition).getName()); String day = child.get(childPosition).getDate(); day = DateTransformer.getDay(day); dateView.setText(day); subjectView.setText(child.get(childPosition).getSubject()); return convertView; } @Override public int getChildrenCount(int groupPosition) { return childs.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return parents.get(groupPosition); } @Override public int getGroupCount() { return parents.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView==null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.parent_view, parent, false); } TextView monthView = (TextView) convertView.findViewById(R.id.monthText); monthView.setText(parents.get(groupPosition)); return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } 

Muchas gracias.

Yo tuve el mismo problema. Los childs de mi ExpandableListView tenían dos ImageViews y TextView. Establecer la propiedad TextView: focusable a "false" en el archivo de diseño resolvió el problema. Curiosamente, el mismo código (sin configurar la propiedad focusable) funcionó bien en API8 pero cuando se ejecutó en el emulador API16, childs no respondió al clic.

  • SurfaceView en ScrollView en 4.1
  • Recepción de la barra de estado oculta / entrada de un evento de actividad de pantalla completa en un servicio
  • Girar un diseño y después de colocar en relativoLayout prblem
  • archivo interno del HTML de la demostración del androide
  • EditText no envolverá su texto
  • WebViewClient no se puede resolver con un tipo
  • Ampliar vidrio para EditText como en iphone: ¿es posible dibujar fuera de una vista?
  • Softkey superposición con el campo EditText
  • ¿Existe un reemplazo para el widget Galería con Reciclado de vistas?
  • SYSTEM_UI_FLAG_LOW_PROFILE no se puede resolver o no es un campo para google threadsample
  • ¿Cómo puedo obtener el tamaño del lienzo de una vista personalizada fuera del método onDraw?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.