Activity código de clase:
conversationList = (ListView)findViewById(android.R.id.list);
ConversationArrayAdapter conversationArrayAdapter=new ConversationArrayAdapter(this, R.layout.conversation_list_item_format_left, conversationDetails);
conversationList.setAdapter(conversationArrayAdapter);
conversationList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Log.d("test","clicked");
}
});
La getViewfunción en la Adapterclase:
if (v == null) {
LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(leftSideMessageNumber.equals(m.getTo())) {
v = vi.inflate(R.layout.conversation_list_item_format_left, null);
} else {
v = vi.inflate(R.layout.conversation_list_item_format_right, null);
}
}
¿Hay algún problema con el uso de dos xmls mientras se infla?

Respuestas:
Acabo de encontrar una solución desde aquí, pero haciendo clic profundo.
Si algún elemento de la fila de la lista contiene una vista enfocable o seleccionable, entonces
OnItemClickListenerno funcionará.El elemento de la fila debe tener un parámetro similar
android:descendantFocusability = "blocksDescendants".Aquí puede ver un ejemplo de cómo debería verse su elemento de la lista. Su elemento de lista xml debe ser ...
row_item.xml(your_xml_file.xml)fuente
listView.setDescendantFocusability(int focus);, dondefocuses uno deViewGroup.FOCUS_BEFORE_DESCENDANTS,ViewGroup.FOCUS_AFTER_DESCENDANTSoViewGroup.FOCUS_BLOCK_DESCENDANTSEl problema es que sus diseños contienen elementos enfocables o seleccionables. Si una vista contiene elementos enfocables o seleccionables, no se llamará a OnItemCLickListener.
Haga clic aquí para más información.
Publique uno de sus xmls de diseño si ese no es el caso.
fuente
EditTextsaTextViews, yCheckBoxse me permitió permanecer (y permanecer activable) conandroid:descendantFocusability="blocksDescendants"agregado a miLinearLayout.android:focusableInTouchMode="true"para la fila, una vez eliminada comenzó a funcionar por fin! :-)Para mis listas, mis filas tienen otras cosas en las que se puede hacer clic, como botones, por lo que hacer una manta
blocksDescendantsno funciona. En cambio, agregué una línea en el botón xml:Eso evita que los botones bloqueen los clics en las filas, pero aún permite que los botones tomen los clics.
fuente
necesitas hacer 2 pasos en tu listview_item.xml
android:descendantFocusability="blocksDescendants"android:clickable="false"android:focusable="false"android:focusableInTouchMode="false"Aquí hay un ejemplo: listview_item.xml
fuente
clickable="trueen la vista del elemento hará queonItemClickno se llame. Así que preste atención para agregar tambiénclickable="false"en la vista raíz del elemento, en este caso es elLinearLayoutuse el código a continuación dentro de la etiqueta del botón en el diseño de fila personalizado de la vista de lista
fuente
android:descendantFocusability="blocksDescendants"bloquear estas casillas de verificación para hacer clicTuve el mismo problema y acabo de ver que accidentalmente había configurado:
en mi clase CustomListViewAdapter.
Al cambiar esto a:
Me las arreglé para solucionar el problema. Por si acaso si alguien ha cometido el mismo error ...
fuente
@Override public void onApplicationStart { ExplodeThisDevice(); }Use android: descenddantFocusability
Agregar arriba en el diseño raíz
fuente
Lo resolví con la ayuda de esta respuesta
1.Agregue lo siguiente en Diseño lineal de list_items.xml
android:descendantFocusability="blocksDescendants"2. Vistas infantiles de LinearLayout en list_items.xml
fuente
si tiene vistas de texto, botones o stg clicables o seleccionables solo en su vista de fila
no es suficiente. Tienes que configurar
a sus vistas de texto y
a sus botones y otros elementos enfocables.
fuente
Incluso estaba teniendo el mismo problema, tengo una casilla de verificación, hice lo siguiente para enmascarar el elemento itemClickListener,
Se agregaron las siguientes propiedades a la casilla de verificación,
y ItemClickListner comenzó a funcionar.
Para un ejemplo detallado, puede ir a través del enlace,
http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/
Espero que ayude ¡Salud!
fuente
Tuve el mismo problema y probé todas las soluciones mencionadas en vano. a través de las pruebas descubrí que hacer que el texto fuera seleccionable impedía que se llamara al oyente. Entonces, al cambiarlo a falso o al eliminarlo, se volvió a llamar a mi oyente.
Espero que esto ayude a alguien que estaba atrapado como yo.
fuente
Agregue esto en el diseño principal
Escriba este código en cada botón, Textview, ImageView, etc. que tienen onClick
Espero que funcione.
fuente
Dos soluciones asombrosas fueron esto: si extiende ListFragment desde un fragmento, sepa que
mListView.setOnItemClickListenerno se llamará antes de que se cree su actividad, esto garantiza que se establezca cuando se haya creado la actividadMientras miraba el código fuente de ListFragment, me encontré con esto
Se
onItemClickListeneradjunta un objeto y llamaonListItemClick()Como tal, la otra solución similar, que funciona exactamente de la misma manera, es anularonListItemClick()fuente
en mi caso, ninguna de las propiedades de diseño xml no fue útil.
Solo agrego una sola línea de código como esta: convertView.setClickable (false);
Básicamente, hace lo mismo que configurar las propiedades en el diseño xml, pero fue lo único que funcionó en mi caso.
No es el momento perfecto, pero tal vez ayude a alguien Codificación feliz
fuente
He intentado todo lo anterior y NADA funcionó.
Resolví el problema de la siguiente manera:
Primero defino un botón personalizado llamado
ListButtonEl XML se ve así:
Luego defino mi propia
ButtonClickedinterfaz de escucha:Luego uso mi propio oyente como si fuera lo normal
OnClickListener:fuente
Tuve el mismo problema, estaba usando un estilo para mis textos en el diseño de fila que tenía el atributo "enfocable". Funcionó después de que lo quité.
fuente
En mi caso, tuve que eliminar la siguiente línea del
Layoutfuente
Android: el atributo autoText también hace que TextView sea auto enfocable.
fuente
Si desea utilizar tanto el clic simple como el clic largo en los elementos de vista de lista, una mejor manera de implementarlo sería usar el menú contextual para hacer clic largo. Evite usar setItemLongClickListener, especialmente si tiene múltiples diseños de fila para su vista de lista.
fuente
Enfrenté el mismo problema, lo intenté durante horas. Si ha intentado todo lo anterior, intente cambiar layout_width de Listview y list item a match_parent de wrap_content.
fuente
Todo lo anterior falló para mí. Sin embargo, pude resolver el problema (después de muchas horas de golpearme la cabeza: Google, si está escuchando, considere corregir lo que encontré a continuación en forma de errores del compilador, si es posible)
Realmente debe tener cuidado con los atributos de Android que agrega a su diseño xml aquí (en esta pregunta original, se llama list_items.xml). Para mí, lo que estaba causando el problema era que había cambiado de una vista EditText a TextView y me quedaba el atributo sobrante del cambio (en mi caso, inputType). El compilador no lo captó y la capacidad de hacer clic simplemente falló cuando fui a ejecutar la aplicación. Verifique todos los atributos que tiene en sus nodos xml de diseño.
fuente
Luego, en su actividad, use adapter.setOnItemClickListener () antes de adjuntarlo a la vista de lista.
Copiado de github me funcionó
fuente
Lo que funcionó para mí fue agregar el siguiente código a cada subvista dentro del diseño de mi archivo row.xml:
Entonces en mi caso:
Y esta es mi llamada a setOnItemClickListener en mi subclase Fragment:
¡Tengo la respuesta de aquí !
fuente
Resolví el problema eliminando las vistas cliqueables de la lista.
fuente