У меня есть scrollView с множеством элементов
ScrollView scroller = (ScrollView)findViewById(R.id.scrollView);
Мне нужно прикрепить onClickListener к scrollview, чтобы я сделал
scroller.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // This is all you need to do to 3D flip AnimationFactory.flipTransition(viewAnimator, FlipDirection.LEFT_RIGHT); } });
Но это не срабатывает, когда я касаюсь. Есть идеи?
Это связано с тем, что дочерний ScrollView
получает событие касания пользователя, а не ScrollView
. Вы должны установить атрибут clickable = false для каждого дочернего элемента ScrollView
для onClickListener
для работы с ScrollView
.
Или альтернативой может быть установка onClickListener
на каждом из дочерних элементов ScrollView и управление им.
Лучшее решение, похоже, помещает LinearLayout
в ScrollView
и устанавливает на нем setOnClickListener
.
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/myLayout" android:clickable="true" android:orientation="vertical"> <!-- content here --> </LinearLayout> </ScrollView>
В Управлении:
LinearLayout lin = (LinearLayout) fragment.rootView.findViewById(R.id.myLayout); lin.setOnTouchListener(new setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // Whatever } });
Вам нужно установить setOnClickListener
непосредственно на дочерний элемент ScrollView .
Поскольку ScrollView может иметь только один ребенок , вы можете просто использовать этот подход:
ScrollView scrollView = //... View.OnClickListener mOnClickListener = new View.OnClickListener() { @Override public void onClick(View view) { // ... } //Set the onClickListener directly on the ScrollView's child scrollView.getChildAt(0).setOnClickListener(mOnClickListener);