ListView y botones dentro de ListView

Quiero mostrar un Button dentro de ListView . El objective 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 checkbox y luego de hacer clic en la checkbox 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 reactjs a los clics!

He probado este ejemplo .

El mismo problema que el anterior …

    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 } }); 

    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"

    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"?>  // Your layout objects here  

    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); } } 

    En mi caso, tuve que agregar este atributo en 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); ..... }