2010-06-06 18 views
6

Mam dość skomplikowane ListView. Każdy element wygląda mniej więcej tak:ListView Elementy, które nie mogą być klikalne z HorizontalScrollView wewnątrz

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

W mojej działalności, gdy element jest tworzony (getView() nazywa) dodam dynamicznych TextView s do LinearLayout wewnątrz HorizontalScrollView (oprócz wypełniania drugiej, prostszej rzeczy out). O dziwo, wydajność jest całkiem dobra.

Moim problemem jest to, że po dodaniu HorizontalScrollView, moje elementy listy stały się niemożliwe do skasowania. Po kliknięciu nie otrzymują pomarańczowego tła i nie wystrzeliwują OnItemClickedListener Mam skonfigurowane (aby wykonać proste wywołanie Log.d).

Jak ponownie ustawić elementy listy?


Edit: ustawienie android:descendantFocusability="blocksDescendants" na najwyższym LinearLayout wydaje się działać. Chciałbym jednak wiedzieć, czy są jeszcze inne sposoby: co zrobić, jeśli chcę, aby można było uaktywniać elementy na liście?

Odpowiedz

8

Korzystanie z android:descendantFocusability="blocksDescendants" na najwyższym LinearLayout załatwiło sprawę. Elementy wewnątrz nadal mogą być "klikalne", po prostu nie można ich uaktywnić (tzn. Nie można ich kliknąć na urządzeniu bez ekranu dotykowego). Wystarczająco dobrze dla mnie.

0

kiedy zastosowano HorizontalScrollView do mojego TableLayout przewijanie działa poprawnie, ale nie dochodzi do kliknięcia na elemencie listy Mój układ jest jak follwos

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

i zastosowano aNDROID descendantFocusability = "blocksDe zwiastuny "do mojego najwyższego rankingu liniowego Dowolna pomoc

0
android:descendantFocusability="blocksDescendants" 

nie pomogło mi. Więc

Więc, zrozumiałem, że patern słuchacza.

public interface EventListItemOnClickListener { 
    public void itemClicked(); 
} 

A w adapterze powiadamia wszystkich słuchaczy

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); 
    } 
... 
Powiązane problemy