Как вызвать onClickListener для HorizontalScrollView?

Вопрос объясняет все, что я хочу.

HorizontalScrollView кажется единственным виджетами, для которых setOnClickListener () не запускается.

ПРИМЕЧАНИЕ. Я не могу использовать событие onTouch, потому что при каждом касании он срабатывает 4-5 раз.

Я также не могу использовать onTouch в своем родительском представлении, потому что у родительского представления есть много кнопок с разной функциональностью.


Следующее описание не имеет значения:

Но все же, это те существующие ссылки, которые я искал (никто не помогал):

Horizontalscrollview onclicklistener не получает вызов

Как реализовать на клиенте прослушивание для horizontalscrollview

Событие Click HorizontalScrollView

Android-событие событий элементов в HorizontalScrollView не отвечает после прокрутки

Это ссылки, которые я опубликовал (никто не получил ответа полностью):

Вставить представления в HorizontalScrollView программно

Один из ImageButton не щелкает и делает HorizontalScrollView доступным для клика

Я задал несколько вопросов в этих ссылках, 1 из которых был «onClickListener для HorizontalScrollView». На эту часть моего вопроса никогда не отвечали.

Отсюда все исключительный вопрос.

Я придумал два способа сделать это.

Более простой (но менее идеальный) вариант:

HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView); scrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { // Do stuff } return false; } }); 

Это вызывается только один раз, когда вы нажимаете, перетаскиваете или все, что вы делаете пальцем. Тем не менее, он также будет реагировать на все виды жестов, поэтому, если вы хотите обнаружить только события «нажмите / клик», вам необходимо дополнительно исследовать объект «событие» и отфильтровать события, которые вам не нужны. Это может быть больше, чем вам хотелось бы, поэтому вам лучше использовать GestureDetector, чтобы сделать это за вас.

Это приводит к методу 2:

  HorizontalScrollView scrollView = (HorizontalScrollView) findViewById(R.id.scrollView); final GestureDetector detector = new GestureDetector(this, new OnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { // Do stuff. return false; } // Note that there are more methods which will appear here // (which you probably don't need). }); scrollView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { detector.onTouchEvent(event); return false; } }); 
Intereting Posts
Как изменить шрифт для заголовков таблеток, созданных в PagerSlidingTabStrip? Получить имя из абсолютного пути, подстроку из последней косой черты, java android Android: применить произвольное преобразование к представлению Как играть несколько сигналов тревоги с помощью уведомления? Asp.net: Как обнаружить iOS / Android? Android LruCache в Android 1.6+ Как получать уведомления, когда приложение закрыто в Android Android делает анимированное видео из списка изображений Android: Как начать бесконечную анимацию, примененную к ImageView после того, как активность с анимированным представлением возобновлена? Обезьяна дает нечетную ошибку в эмуляторе Android Утилита Historian.par батареи L батареи отсутствует Отправьте строку на Android с помощью HttpPost без использования nameValuePairs Нужно ли вызывать Bitmap.recycle () после использования (в Android)? SQLite Database дает предупреждение об автоматическом индексе на <имя_таблицы> (столбец). После обновления Android L Android: пользовательский маркер контактов с кнопками в API карт Google 2