java - 如何为 ScrollView 设置 OnClickListener?

标签 java android android-fragments onclicklistener android-scrollview

我正在开发一个带有 viewpager 的 android 项目。我为我的 viewpager 编写了一个适配器,我的适配器由 s scrollview 和其中的一些 View 组成。

我希望当用户点击 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 的子 View 正在消耗您在 ScrollView 上执行的点击事件。

此问题的解决方案是将 onClickLIstener 设置为 ScrollViewimmediate 子级,即 FrameLayout 在你的情况下。

不要忘记将布局设置为“可点击”。

此外,我建议根本不要使用 FrameLayout,因为它只是一个无用的容器。相反,只需让当前作为 FrameLayout 子级的 LinearLayout 成为 ScrollView 的下一个子级。

关于java - 如何为 ScrollView 设置 OnClickListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495893/

相关文章:

java - 一个服务、一个线程、一个 Activity 和一个静态 ArrayList

android - Activity状态丢失,部分设备Illegal state异常

android - Android Studio 中的抽屉导航模板

java - 将 HTTPS 添加到 Google App Engine 上的自定义域(并保持 HTTP 正常工作)

JavaEE - EJB over SSL 仅当客户端和服务器位于同一主机时才有效

java - Android,如何从try catch错误中显示对话框?

android - 未处理的异常 : MissingPluginException(No implementation found for method getBatteryLevel on channel *) with flutter1. 12

android - 使用camera2 API获取单张图片并用ImageView显示

java - 如何将任何对象转换为字符串?

android - 在两个 fragment 之间拖放