¿Cómo resaltar el elemento ListView en el tacto?

Tengo un ListView simple y quiero que cada uno de los elementos que se destacan en el toque del usuario. Pensé que esto debería suceder por defecto pero no lo es. ¿Puede usted consejo?

ListView xml:

 <ListView android:id="@+id/list_view" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dp" android:divider="#206600" android:dividerHeight="2dp" android:smoothScrollbar="true" android:background="#ffffff" > </ListView> 

Y el código de mi adaptador:

 private class MyAdapter extends ArrayAdapter<Task> { private LayoutInflater mInflater; public MyAdapter(Context context, int resource, List<Task> list) { super(context, resource, list); mInflater = LayoutInflater.from(context); } @Override public View getView(int position, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { v = mInflater.inflate(R.layout.list_item, null); } Task task = taskList.get(position); /* Setup views from your layout using data in Object here */ return v; } 

Es posible que desee publicar su código de disposición de fila real, pero sospecho que el problema será que se establece un color de fondo en la fila de la lista. De forma predeterminada, los selectores se dibujan detrás de los elementos de la lista (lo que parece más agradable, ya que el color de resaltado está detrás del texto). No establece un color de fondo en los elementos de la lista ni lo establece para dibujar el selector en la parte superior con el drawSelectorOnTop XML drawSelectorOnTop de ListView.

EDIT: Si realmente debe tener un fondo opaco para el estado predeterminado y no desea utilizar drawSelectorOnTop , también puede probar esto: Establezca un fondo en sus filas de lista, pero use un StateListDrawable para usar @android:drawable/list_selector_background for Todos excepto el estado predeterminado (puede definir un archivo xml en su carpeta drawables para esto, vea la documentación de StateList).

También puede anidar un diseño dentro de su diseño de fila de fondo externo con su fondo establecido en @android:drawable/list_selector_background ; De esa manera el fondo se dibujaría en la parte superior de su fondo, pero por debajo del contenido.

ListView s no conserva una indicación visual de enfoque (o selección) mientras está en modo táctil. Sólo verá esto cuando utilice el teclado o los controles de hardware para navegar por su interfaz de usuario.

Consulta el artículo Blog Android de Google Touch Mode para obtener más detalles.

Por lo tanto, si sólo está utilizando el modo táctil, nunca verá el enfoque o la selección en ListView .

Creo que esto tiene que ver con el atributo "Enabled" de los elementos en el ListAdapter.

Si su adaptador contiene el código:

 @Override public boolean areAllItemsEnabled() { return true; } 

Entonces cada artículo debe ser clickable (y por lo tanto debe destacar en ser tocado).

¿Podría publicar detalles (y posiblemente código) de qué tipo de adaptador está utilizando para esta lista?

Luché con esto durante unos días. Al final, tengo que crear un widget que admita la interfaz Checkable y devolver ese widget / vista en la función getiew() mi adaptador. Y la lista debe estar en ListView.CHOICE_MODE_SINGLE (o posiblemente en cualquier otro modo especificado por android:choiceMode ) para que pueda realizar un seguimiento de la elección realizada en la interfaz de usuario.

Así que en esencia, todo lo siguiente debe estar en su lugar para que el elemento listview permanezca resaltado:

  1. ListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
  2. ListAdapter.getView() devuelve una vista que implementa la interfaz Checkable
  3. ListView.OnItemClickListener debe llamar a setItemChecked(position, true) para marcar el elemento que se va a comprobar (y así resaltarlo en el listview)

Espero que esto puede ayudar a alguien que también está luchando con esto.

  • ¿Por qué utilizar Inflater en listview?
  • Buena solución para retener los elementos listview cuando el usuario rote el teléfono y mantenga todos los datos en ArrayAdapter
  • Custom Listview scroll esconde el proceso de la barra de progreso y ImageView
  • Omitir una fila en la vista de lista
  • Gestión de la memoria de Android Endless list
  • Pinch Android y Zoom de la imagen en la actividad
  • Android ListView: Encabezado / Pie de página que llena el espacio restante en la pantalla
  • ¿Cómo puedo crear un menú de opciones de diapositivas para los elementos de ListView de Android?
  • ¿Hay una manera de mostrar la barra de desplazamiento de ListView todo el tiempo?
  • FragmentPagerAdapter Deslizar para mostrar ListView 1/3 Anchura de la pantalla
  • Cómo utilizar D-pad navegar cambiar entre la fila de listview y sus decendants (soporte de Google-TV)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.