Uso de Android, ¿cómo puedo seleccionar filas de un ListView que contiene controles Button

Tengo el siguiente, programa de prueba muy simple para usar un ListView. Creo un ListView y lo configuro como la vista de contenido. Establecer un ListAdapter que suministra las filas. Hay 30 filas, y cada fila consta de un LinearLayout ViewGroup. En ese ViewGroup, coloco un TextView y un Button. Cuando ejecuto el programa, encuentro que no puedo seleccionar filas de la lista. Sin embargo, puedo desplazar la lista y hacer clic en el botón.

Si elimino el botón de LinearLayout (de modo que sólo contiene el TextView), entonces puedo seleccionar filas de la lista. Me gustaría poder tener botones en mis vistas de fila individuales, y todavía ser capaz de seleccionar filas de la lista. En otro foro, alguien dijo que esto era posible, pero estoy en una pérdida en cuanto a cómo lograrlo.

¿Puede alguien darme una pista?

Gracias.

public class ListViewTest extends Activity implements ListAdapter { int m_count; DataSetObserver m_observer; public ListViewTest() { m_count = 30; m_observer = null; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView lv = new ListView(this); lv.setAdapter(this); lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE); setContentView(lv); } @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int position) { return true; } @Override public int getCount() { return m_count; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public int getItemViewType(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout vg = new LinearLayout(this); TextView tv = new TextView(this); tv.setText("ListItem"); Button bv = new Button(this); bv.setText("Button"); vg.addView(tv); vg.addView(bv); return(vg); } @Override public int getViewTypeCount() { return 1; } @Override public boolean hasStableIds() { return false; } @Override public boolean isEmpty() { return false; } @Override public void registerDataSetObserver(DataSetObserver observer) { m_observer = observer; } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } } 

Como las otras respuestas señalan, si o no puede seleccionar filas ListView como elementos completos por sí mismos depende de si o no esas filas contienen elementos focusable. Sin embargo, la solución normalmente no establece focusable = false en los botones o similares. Eso evitará que tu aplicación sea navegable con un d-pad, trackball, teclas de flecha, o lo que tienes.

Desea que sus elementos de lista puedan controlar sus propias propiedades de enfoque. Desea setItemsCanFocus . Esto deshabilitará el control especial de enfoque / selección que ListView utiliza normalmente para tratar los elementos de la lista como una sola unidad.

Ahora puedes establecer un listener en el diseño que usas como el elemento de nivel superior en tus filas, establecer un fondo stateful dibujable en él para mostrar el estado de focus / press, así como las propiedades de focusLeft / Right para controlar el desplazamiento del foco dentro del propio elemento .

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.