2013-03-18 14 views
12

Mam ViewPager, który zawiera dwa fragmenty. W każdym z fragmentów mogę dotknąć miejsca, przesuń palcem, aby przełączyć na inny fragment. Jeden z fragmentów zawiera listę. Elementy na liście zawierają jeden TextView i jeden ImageView. Problem polega na tym, że jeśli przeciągnięcie zostało rozpoczęte po dotknięciu ImageView, jest OK. Ale jeśli to było z TextView, opór był nigdy znana ViewPager, w wyniku czego „gładkie przełączanie” nigdy nie zdarza.TextView wewnątrz ViewPager przechwytuje zdarzenia dotykowe

Każdy trop w tej sprawie?

EDIT

Ten obraz jest pokazanie, jak mój GUI. Jeśli przeciągnięcie zostało rozpoczęte od TextViewE, to się nie rozpoczyna. enter image description here

+1

Należy zakładać jakiś kod. Nie ma nic szczególnego w 'TextView', który przesłania' ViewPager'. – adneal

+1

@aneal sprawdzić, czy obraz wyjaśnia swój pomysł lepszy – tactoth

+0

mnie to błędy tyle, byłbym zadowolony, aby zobaczyć odpowiedź też. TextView znajduje się w zasięgu przechwytywania ListView, ViewPager stał się ledwo użyteczny. – pechenie

Odpowiedz

35

To coś przeszkadza mi też, ale udało mi się znaleźć odpowiedź.

Zasadniczo chodzi o to, że jeśli widok może być przewijany w poziomie, przechwytuje zdarzenie ruchu poziomego i ViewPager nie może go przetworzyć.

Od API poziom 14 TextView mieć android: scrollHorizontally własności (i setHorizontallyScrolling (Boolean) metoda), która, jeśli ma wartość true, powoduje TextView przechwycić zdarzenia przewijania poziomego ruchu.

można go ustawić na false albo w formacie XML lub bezpośrednio w kodzie, ale uważaj: androida: SingleLine siły własności androida: scrollHorizontally być ustawiony na prawdziwej! Bardzo podstępny punkt! Ale na szczęście, zwykle w stanie bezpiecznie zastąpić pojedynczy obiekt liniowy z android: maxLines = „1” i potrzeby wartość ellipsize.

Powodzenia!

+1

Znalazłem ten sam problem i odkryłem, że usunięcie instrukcji singleLine zostało rozwiązane. Właśnie dowiedziałem się, dlaczego: D. Dzięki! –

+0

Przepraszam, że zapomniałem sprawdzić tę odpowiedź wkrótce. To jest świetne. – tactoth

+0

Jeśli chcę ustawić ramkę w widoku tekstowym, muszę ustawić wartość pojedynczej linii, aby była prawdziwa. Czy istnieje sposób, aby tego uniknąć i włączyć markietkę też? – berserk

0

można zastąpić onTouchEvent() z TextView:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_MOVE) { 
     return false; 
    } 

    return super.onTouchEvent(event); 
} 
Powiązane problemy