简体   繁体   English

如何为ScrollView设置OnClickListener?

[英]How to set OnClickListener for ScrollView?

i'm developing an android project which it has a viewpager. 我正在开发一个拥有viewpager的android项目。 i wrote an adapter for my viewpager and my adapter consist of s scrollview and some views inside that. 我为我的viewpager写了一个适配器,我的适配器由s scrollview和里面的一些视图组成。

i want when user click on the scrollview, something happen (i wrote this part too and test it and it works). 我想当用户点击滚动视图时,会发生一些事情(我也写了这部分并测试它并且它有效)。

i implement onClickListener for my scrollview but it's not triggered when user click on that. 我为我的scrollview实现了onClickListener,但是当用户点击它时它不会被触发。

i have already read this but it's not work for me. 我已经读过这个,但这对我不起作用。

my code for onClickListener is here 我的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!!!");
        }
});

and my layout code is this: 我的布局代码是这样的:

<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>

The child Views of your ScrollView are consuming the click events you do on the ScrollView . ScrollView的子Views正在消耗您在ScrollView上执行的单击事件。

The solution to this problem is to set the onClickLIstener to the immediate child of the ScrollView , the FrameLayout in your case. 此问题的解决方案是将onClickLIstener设置为ScrollView直接子项,即您的案例中的FrameLayout

Don't forget to set the layout to "clickable". 不要忘记将布局设置为“可点击”。

Furthermore, I recommend not to use the FrameLayout at all, since it is just a useless container. 此外,我建议不要使用FrameLayout ,因为它只是一个无用的容器。 Instead, just let the LinearLayout that is currently the child of the FrameLayout be the next child to the ScrollView . 相反,只需让当前FrameLayout的子项的LinearLayout成为ScrollView的下一个子项。

try: 尝试:

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!!!");
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM