我正在开发一个拥有viewpager的
android项目.我为我的viewpager写了一个适配器,我的适配器由s scrollview和里面的一些视图组成.
我想当用户点击滚动视图时,会发生一些事情(我也写了这部分并测试它并且它有效).
我为我的scrollview实现了onClickListener,但是当用户点击它时它不会被触发.
我已经阅读了this,但这对我不起作用.
我的onClickListener代码就在这里
rootView = inflater.inflate(R.layout.level_selector_list_view_adapter,container,false); ScrollView scroll = (ScrollView) rootView.findViewById(R.id.level_selector_view_scroll_view); scroll.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { Log.e(MainActivity.WATERMELON_TAG,"Click!!!"); } });
我的布局代码是这样的:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="@dimen/level_selector_values_main_page_view_pager_width" android:layout_height="wrap_content" android:orientation="vertical" > <ScrollView android:id="@+id/level_selector_view_scroll_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" tools:ignore="UselessParent" > <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="false" tools:ignore="UselessParent" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:clickable="false" android:orientation="vertical" > <ImageView android:id="@+id/level_selector_view_pager_adapter_level_logo" android:layout_width="@dimen/level_selector_values_view_pager_adapter_level_logo_width" android:layout_height="@dimen/level_selector_values_view_pager_adapter_level_logo_height" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/level_selector_values_view_pager_adapter_level_logo_top_margin" android:clickable="false" android:scaleType="fitXY" tools:ignore="ContentDescription" /> <TextView android:id="@+id/level_selector_view_pager_adapter_level_name" android:layout_width="@dimen/level_selector_values_view_pager_adapter_level_name_width" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/level_selector_values_view_pager_adapter_level_name_top_margin" android:clickable="false" android:gravity="center" android:textColor="@color/level_selector_values_level_name_font_color" android:textSize="@dimen/level_selector_values_level_name_font_size" /> <TextView android:id="@+id/level_selector_view_pager_adapter_level_score" android:layout_width="@dimen/level_selector_values_view_pager_adapter_level_score_width" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="@dimen/level_selector_values_view_pager_adapter_level_score_top_margin" android:clickable="false" android:gravity="center" android:textColor="@color/level_selector_values_level_name_font_color" android:textSize="@dimen/level_selector_values_font_size" /> </LinearLayout> <ImageView android:id="@+id/level_selector_view_pager_adapter_lock" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:alpha="0.75" android:clickable="false" android:scaleType="fitXY" android:src="@drawable/lock" tools:ignore="ContentDescription" /> </FrameLayout> </ScrollView>
解决方法
ScrollView的子视图正在消耗您在ScrollView上执行的单击事件.
此问题的解决方案是将onClickLIstener设置为ScrollView的直接子项,即您的案例中的FrameLayout.
不要忘记将布局设置为“可点击”.
此外,我建议不要使用FrameLayout,因为它只是一个无用的容器.相反,只需让当前FrameLayout的子项的LinearLayout成为ScrollView的下一个子项.