¿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:
- HasStableIds () en ListView expandible?
- ¿Cómo se basan las coordenadas de un Android onTouchEvent MotionEvent?
- Cómo iniciar dos animaciones en dos vistas diferentes en API lvl 19
- Cuál es la ventaja de usar el espacio sobre la vista
- SurfaceView en ScrollView en 4.1
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.
- ¿Hay una manera de desplazarse mediante programación una vista de desplazamiento a un texto de edición específico?
- Vista de calibre simple como speedmeter en android?
- SetPivotX funciona extraño en la vista escalada
- SurfaceView con vista previa de cámara no se destruye
- Eliminar márgenes en webView
- ¿Cómo obtener el lienzo actual?
- Android LongClickListener en los elementos del grupo ExpandableListView
- Obtener el valor del atributo Hint de AttributeSet
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
- ExpandableListView.setOnGroupExpandListener para capturar el evento al expandir
- ExpandableListView.setOnGroupCollapseListener para capturar el evento al colapsar.
- 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
- Android: no se puede destruir la actividad después de terminar, causada por IllegalStateException: No se puede realizar esta acción después de onSaveInstanceState
- Establecer opacidad extraíble