【问题标题】:How to set OnClickListener for ScrollView?如何为 ScrollView 设置 OnClickListener?
【发布时间】:2014-06-30 17:44:25
【问题描述】:

我正在开发一个具有 viewpager 的 android 项目。我为我的 viewpager 编写了一个适配器,我的适配器由滚动视图和其中的一些视图组成。

我希望当用户单击滚动视图时,会发生一些事情(我也写了这部分并对其进行了测试,它可以工作)。

我为我的滚动视图实现了 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>

【问题讨论】:

    标签: java android android-fragments onclicklistener android-scrollview


    【解决方案1】:

    您的ScrollView 的孩子Views 正在消费您在ScrollView 上执行的点击事件。

    解决此问题的方法是将onClickLIstener 设置为ScrollView立即 子级,在您的情况下为FrameLayout

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

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

    【讨论】:

    • 我试试这个,但它不再起作用了!我将滚动视图的所有子项设置为可点击,并且将滚动视图的父项设置为可点击。但结果和以前一样:(
    • 好的,请编辑您的问题并发布您的完整代码和布局。
    • 如你所说,我编辑我的代码并发布你想要的所有内容。非常感谢您的时间和帮助:))
    • 你试过我的答案了吗?
    【解决方案2】:

    尝试:

    public class ClassName implements OnClickListener {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    
            View root = inflater.inflate(R.layout.fragment_child, container, false);
            ScrollView scrollView= (ScrollView) root.findViewById(R.id.my_ScrollView);
    
            scrollView.setOnClickListener(this);
    
            return root;
        }
        @Override
        public void onClick(View v) {
            Log.e(MainActivity.WATERMELON_TAG, "Click!!!");
        }
    }
    

    【讨论】:

    • 乍一看是个好主意!但我尝试它也没有:((
    • 好的,请把你的java代码也贴出来,看看我们能不能搞定。我最近制作了一个应用程序,它可以满足您的需求。唯一的区别是我在滚动视图中有一个文本视图,它可以拉伸整个页面。比我使 textView 可点击。哦,您将 root.findViewById(R.id.my_scrollView) 更改为 R.id.level_selector_view_scroll_view 。对吗?
    • Philipp Jahoda 是正确的。您的 ScrollView 隐藏在其他视图后面,因此您无法单击它。如果您尝试使图片 id = level_selector_view_pager_adapter_level_logo 可点击,这将起作用。因为它位于所有视图之上,你的 TextView 也是如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多