2013-03-18 3 views
12

У меня есть ViewPager, который содержит два фрагмента. В любом из фрагментов я могу прикоснуться к месту, проведите пальцем, чтобы переключиться на другой fragment. Один из фрагментов содержит список. Элементы в списке содержат один TextView и один ImageView. Проблема в том, что если перетаскивание началось с нажатия ImageView, все в порядке. Но если это было от TextView, сопротивление никогда не было известно ViewPager, в результате «плавное переключение» никогда не происходит.TextView внутри ViewPager перехватывает события касания

Любой ключ к этому вопросу?

EDIT

Эта картина, чтобы показать, как мой графический интерфейс. Если перетаскивание было начато с TextViewE, оно не начинается. enter image description here

+1

Необходимо отправить код. В «TextView» нет ничего особенного, который переопределяет «ViewPager». – adneal

+1

@aneal Посмотрите, если картина объясняет мою идею лучше – tactoth

+0

Это меня так сильно задевает, я был бы рад увидеть ответ. TextView внутри перехвата ListView, ViewPager стал едва пригодным для использования. – pechenie

ответ

35

Эта вещь слишком беспокоит меня, но мне удалось найти ответ.

В принципе, случай: если вид может прокручиваться по горизонтали, он перехватывает событие горизонтального движения и ViewPager не может его обработать.

Поскольку уровень API 14 TextViews имеет андроид: scrollHorizontally свойства (и setHorizontallyScrolling (булевы) метода), который, если установлен верно, вызывает TextView для перехвата горизонтальных событий движения прокрутки.

Вы можете установить его на ложный либо в XML или прямо в коде, но следить: андроида: SingleLine собственности силы андроида: scrollHorizontally быть установлен в истинной! Очень сложная точка! Но, к счастью, вы обычно можете безопасно заменить однострочное свойство android: maxLines = "1" и необходимо ellipsize значение.

Удачи вам!

+1

Обнаружена та же проблема и обнаружено, что удаление оператора singleLine разрешено. Просто узнал, почему: D. Благодаря! –

+0

Извините, что забыли проверить этот ответ в ближайшее время. Это отлично. – tactoth

+0

Если я хочу установить выделение для текстового вида, мне нужно установить singleLine как true. Есть ли способ избежать этого и включить шатер? – berserk

0

вы можете переопределить onTouchEvent() из TextView:

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

    return super.onTouchEvent(event); 
}