¿Por qué se ignoran los clics en mi ExpandableListView?

Tengo un AlertDialog poblado por un ExpandableListView. La lista en sí funciona perfectamente, pero por alguna razón los clics se ignoran. Aparentemente mi manejador de clics nunca se llama.

Este es el código:

AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select something"); ExpandableListView myList = new ExpandableListView(this); MyExpandableListAdapter myAdapter = new MyExpandableListAdapter(); myList.setAdapter(myAdapter); myList.setOnItemClickListener(new ExpandableListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int i, long l) { try { Toast.makeText(ExpandableList1.this, "You clicked me", Toast.LENGTH_LONG).show(); } catch(Exception e) { System.out.println("something wrong here "); } } }); builder.setView(myList); dialog = builder.create(); dialog.show(); 

Si en cambio intento rellenar el AlertDialog con un listview simple, los eventos de clic se generan sin problemas:

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Select Color Mode"); ListView modeList = new ListView(this); String[] stringArray = new String[] { "Bright Mode", "Normal Mode" }; ArrayAdapter<String> modeAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, stringArray); modeList.setAdapter(modeAdapter); modeList.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // When clicked, show a toast with the TextView text Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); } }); builder.setView(modeList); AlertDialog dialog1 = builder.create(); dialog1.show(); 

¿Cuál podría ser la razón por la cual el evento de clic falla en mi ExpandableListView pero no en un ListView normal? Probablemente estoy perdiendo algo, pero no tengo ni idea de lo que podría ser.

Ok, la solución fue bastante simple. Puesto que es una lista expandible, los clics de elemento se capturan en la propia lista para abrir los elementos secundarios. Por lo tanto, el controlador de eventos nunca se llama.

En su lugar, tiene que implementar OnChildClickListener () que – como su nombre sugiere – escucha clics secundarios!

Thx, también me estaba preguntando sobre ello. Pero sigue siendo interesante la información en la documentación:

Public void setOnItemClickListener (AdapterView.OnItemClickListener l) "Registrar una devolución de llamada a invocarse cuando se ha hecho clic en un elemento y la persona que llama prefiere recibir una posición de estilo ListView en lugar de una posición de grupo y / o secundaria".

En documentos se menciona claramente que debe ser capaz de establecer y manejar este oyente si desea …

Usted puede usar

  1. ExpandableListView.setOnGroupExpandListener para capturar el evento al expandir
  2. ExpandableListView.setOnGroupCollapseListener para capturar el evento al colapsar.
  3. ExpandableListView.setOnGroupClickListener para capturar el evento tanto al expandir o colapsar

Enlace al sitio de desarrolladores:

https://developer.android.com/reference/android/widget/ExpandableListView.html

  • Textview dentro de RelativeLayout en la vista personalizada ¿No se aplica la gravedad correctamente?
  • Android 3.0, Vista previa de widgets
  • Android - listview obtener la vista del artículo por posición
  • agregar vista (vista de texto) en AsyncTask
  • Cómo mostrar la imagenVer pantalla completa en la imagen¿Haga clic?
  • Android - no puede capturar el espacio atrás / borrar la prensa en suave. teclado
  • ¿Cómo mostrar la lista desplegable-ver debajo de la vista particular en android?
  • Android View.OnKeyListener: haga clic una vez, ejecute dos veces
  • Cómo pasar un valor de cadena a webView de una actividad
  • Android ExpandableListView Ocultar grupo
  • Detección de vistas invisibles en un evento de movimiento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.