2010-06-06 17 views
6

Tengo un complicado ListView. Cada elemento se ve algo como esto:ListView elementos no se puede hacer clic con HorizontalScrollView dentro

> LinearLayout (vertical) 
    > LinearLayout (horizontal) 
    > include (horizontal LinearLayout with two TextViews) 
    > include (ditto) 
    > include (ditto) 
    > TextView 
    > HorizontalScrollView (this guy is my problem) 
    > LinearLayout (horizontal) 

En mi actividad, cuando se crea un elemento (getView() se llama) agrego dinámicas TextView s a la LinearLayout dentro del HorizontalScrollView (además de llenar las otras cosas, más simple hacia fuera). Sorprendentemente, el rendimiento es bastante bueno.

Mi problema es que cuando agregué el HorizontalScrollView, los elementos de mi lista dejaron de hacerse clic. No reciben el fondo naranja cuando se hace clic y no activan el OnItemClickedListener que configuré (para hacer una simple llamada a Log.d).

¿Cómo puedo hacer que se vuelva a hacer clic en los elementos de mi lista?


Editar: establecer android:descendantFocusability="blocksDescendants" en la más alta LinearLayout parece funcionar. Sin embargo, me gustaría saber si hay otras formas: ¿qué sucede si quiero elementos enfocables en los elementos de mi lista?

Respuesta

8

Utilizando android:descendantFocusability="blocksDescendants" en la parte superior LinearLayout hizo el truco. Los elementos internos aún se pueden hacer "clicables", simplemente no son enfocables (es decir, no se puede hacer clic en ellos en un dispositivo sin pantalla táctil). Suficientemente bueno para mi.

0

cuando solicité a mi HorizontalScrollView desplazamiento TableLayout está trabajando bien, pero no puede hacer clic en el elemento de la lista Mi diseño es tan follwos

LinearLayout HorizontalScrollView TableLayout ......... /TableLayout /HorizontalScrollView /LinearLayout

i aplica androide: descendantFocusability = "blocksDe escenarios "en mi parte superior linearlayout Any Help

0
android:descendantFocusability="blocksDescendants" 

no me sirvió. Así que

Entonces, me di cuenta listener patern.

public interface EventListItemOnClickListener { 
    public void itemClicked(); 
} 

Y en adaptador de notificar a todos los oyentes

private List<EventListItemOnClickListener> listeners; 
protected void notifyOnClick(int position){ 
    for(int i=0; i<listeners.size();++i) 
    listeners.get(i).itemClicked((Event)events.get(position)); 
} 
... 
    @Override 
    public void onClick(View v) { 
     notifyOnClick(position); 
    } 
... 
Cuestiones relacionadas