OnClickListener на scrollView
У меня есть 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);
}
});
Но это не срабатывает, когда я касаюсь. Любые идеи?
Ответы
Ответ 1
Это потому, что дочерний элемент ScrollView
получает событие касания пользователя, а не ScrollView
. Вы должны установить атрибут clickable = false для каждого дочернего элемента ScrollView
для onClickListener
для работы с ScrollView
.
Или альтернативой может быть установка onClickListener
для каждого из детей ScrollView и управление им.
Ответ 2
Лучшее решение, похоже, помещает 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
}
});
Ответ 3
Вам нужно установить setOnClickListener
непосредственно в дочернем элементе ScrollView.
Так как ScrollView может иметь только один дочерний, вы можете просто использовать этот подход:
ScrollView scrollView = //...
View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
// ...
}
//Set the onClickListener directly on the ScrollView child
scrollView.getChildAt(0).setOnClickListener(mOnClickListener);