studio programacion herramientas fundamentos con avanzado aplicaciones android listview button adapter onitemclicklistener

programacion - manual de android en pdf



OnItemClickListener no funciona con el elemento ListView que contiene el botón (8)

Tengo ListView con Adapter personalizado que proporciona View a ListView de esta manera:

public View getView(int position, View convertView, ViewGroup parent) { RelativeLayout.LayoutParams lineParams; RelativeLayout line=new RelativeLayout(context); TextView tv=new TextView(context); tv.setText("Text in postion="+i); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT); line.addView(tv, lineParams); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); //checkbox CheckBox checkBox=new CheckBox(context); lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); lineParams.addRule(RelativeLayout.CENTER_IN_PARENT); line.addView(checkBox, lineParams); return line; }

Y en algún lugar dentro de ListView hay setOnItemClickListener() , que debe interceptar elementos haciendo clic en eventos. Mi problema es que, cada vez que intento agregar una casilla de verificación al elemento, no obtengo ninguna respuesta de mi ListView . Si omito CheckBox o cualquier otro Button , funciona.

Estoy realmente atascado con este problema, he intentado todo tipo de diseños, alineación, envoltura, etc., inútil. Parece que CheckBox interfiere con los eventos de clic de elementos de ListView .

¿Alguna idea de cómo superarla?


Agregue la siguiente línea a su listaVer

android:choiceMode="singleChoice"

o asegúrese de establecer las siguientes líneas en sus campos de texto de diseño

android:focusable="false" android:focusableInTouchMode="false" android:clickable="false"


Bueno, sé que ninguna de las soluciones anteriores funcionará. Intenté cambiar los atributos xml, pero eso no funciona, pero lo implementé de una manera nueva. Aquí es cómo:

Cree una interfaz CheckBoxOnCheckListener con el método onCheckBoxChecked y pase los parámetros necesarios, implemente la interfaz CheckBoxOnCheckListener en su actividad o fragmento que contenga listView .

A continuación en su adaptador, declare un mListener como CheckBoxOnCheckListener , y páselo como un parámetro al constructor del Adaptador a partir del fragment/activity y mListener en CheckBoxOnCheckListener y mListener a mListener .

El siguiente conjunto mListener como itemView.onClick o CheckBox.onCheckCheckedListener y el método mListener.onCheckBoxChecked llaman mListener.onCheckBoxChecked .

Eso es. Definitivamente funcionará, funcionó para mí. Para el código solo pm.


Puede considerar escribir OnTouchEvent en su elemento listview y enviar el touchEvent apropiado a su vista secundaria, el botón.


Si está utilizando ListView en Activity , asegúrese de tener la configuración setOnItemClickListener()

myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener


Si tiene ImageButtons dentro del elemento de la lista, debe agregar:

android:descendantFocusability="blocksDescendants"

al elemento del elemento de la lista raíz [como el diseño raíz].

Luego, dentro de cada ImageButton en el elemento de la lista, debe agregar:

android:focusableInTouchMode="true"

Esto funcionó para mí, pero estaba usando ImageButtons, no el botón estándar.


También me he enfrentado al mismo problema que he intentado establecer android:focusable="false" para listview pero no funciona, entonces agrego esto al elemento listview ... como en mi ítem listview, he uesed el botón Toggle que estaba creando un problema , Agrego android:focusable="false" para alternar el botón y la vista de lista en el elemento haga clic en escuchar el inicio de nuevo trabajar


También tuve el problema de un botón en mi ListView. Desafortunadamente, configurar el foco en falso para todos los objetos en mi Adaptador no funcionó para mí.

Ahora tengo una solución.

En su adaptador, cree un OnClickListener para el botón (u otro objeto seleccionable) si aún no lo ha hecho. En ese OnClickListener usted llama al OnItemClickListener usted mismo.

public void onClick(View v) { mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId); }

Significa que tendrá que darle acceso a su adaptador al ListView principal y al OnItemClickListener.


simplemente agregue esta línea en las vistas de elementos en lugar de listView

android:focusable="false"

compruebe más detalles sobre esto desde Android personalizado ListView incapaz de hacer clic en los elementos