studio programacion herramientas fundamentos con avanzado aplicaciones android listview button

programacion - manual de android en pdf



ListView y botones dentro de ListView (5)

Agregue la siguiente línea a su elemento XML de la lista.

android:descendantFocusability="blocksDescendants"

Entonces su elemento de lista será así:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:descendantFocusability="blocksDescendants" android:layout_height="wrap_content" > // Your layout objects here </RelativeLayout>

Quiero mostrar un Button dentro de ListView . El objetivo debe ser hacer clic en la línea ListView o en el botón.

Haga clic en la línea que muestra más información. Haga clic en el botón que muestra en la parte inferior más botones.

Lo mismo que la aplicación GMAIL.

A la derecha hay una casilla de verificación y luego de hacer clic en la casilla de verificación en la parte inferior, aparece la barra de botones.

Mi problema es después de insertar el botón en ListView , no se puede hacer clic en el botón. Si agrego el a LinearLayout desde el botón llButton.setClickable() , funciona. Pero, solo el botón. ¡ ListView ya no reacciona a los clics!

He probado este ejemplo .

El mismo problema que el anterior ...


En mi caso, tuve que agregar este atributo en ListView:

<ListView ... android:clickable="true" ... </ListView>

Y en el adaptador simplemente agregue el oyente clic en la vista del botón.

wrapper.getButtonHi().setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DebugUtils.logDebug("Clickeado :: "+ mContact.getUserId()); } });

Es importante establecer las variables finales:

public View getRowView(final int position, View convertView, ViewGroup parent) { final BrowseContactItemWrapper wrapper; final UserModel mContact = lstContact.get(position); ..... }


Para dejar esto en claro, y nadie parece haber dicho algo así de simple, mientras uno no tiene permitido trabajar con un botón enfocable junto con la vista de lista, hay una solución mucho más simple para esto.

La respuesta aceptada es un hecho: siempre debes hacer eso al configurar el oyente click para los elementos de la lista, así que es una tontería que OP no lo sepa.

Si está utilizando un diseño XML como elemento de la lista, simplemente configure el botón para que tenga el siguiente atributo y hará que también se pueda hacer clic en el elemento de la lista:

android:focusable="false"


Para hacer que el evento se active cuando se hace clic en el botón o en el elemento de la lista, puede hacer lo siguiente:

Usted maneja solo onItemClick:

mListView.setOnItemClickListener(new ListView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> a, View v, int i, long l) { // handle click here } );

En el adaptador, modifica el botón para que no se pueda hacer clic / se pueda enfocar (o hacer esto en el archivo xml):

public class MyAdapter extends BaseAdapter { ... public View getView(int position, View convertView, ViewGroup parent) { ..... Button btn = view.findViewById(R.id.button); btn.setFocusable(false); btn.setClickable(false); } }


Si está usando un Adaptador personalizado, el botón OnItemClickListener clic dentro de un ListView no funcionará, por lo que debe intentar usar el siguiente código para verificar OnItemClickListener .

listId.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> list, View v, int pos, long id) { // Your code for item clicks } });