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 getView
función en la Adapter
clase:
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
OnItemClickListener
no 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);
, dondefocus
es uno deViewGroup.FOCUS_BEFORE_DESCENDANTS
,ViewGroup.FOCUS_AFTER_DESCENDANTS
oViewGroup.FOCUS_BLOCK_DESCENDANTS
El 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
EditText
saTextView
s, yCheckBox
se 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
blocksDescendants
no 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="true
en la vista del elemento hará queonItemClick
no se llame. Así que preste atención para agregar tambiénclickable="false"
en la vista raíz del elemento, en este caso es elLinearLayout
use 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.setOnItemClickListener
no 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
onItemClickListener
adjunta 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
ListButton
El XML se ve así:
Luego defino mi propia
ButtonClicked
interfaz 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
Layout
fuente
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