在使用View Pager的片段内未触发OnClick侦听器

时间:2017-09-08 15:24:38

标签: android android-layout android-fragments android-viewpager onclicklistener

我希望能够在View.OnclickListener的页面(片段)中设置ImageViewViewPager,我不想点击整个页面我的ViewPager,我只想点击一个规范ImageView。我遵循了这些问题(onClick not triggered on LinearLayout with childHow to set OnClickListener in ViewPager ),但他们没有帮助我。这是我的实际代码:

MyPageFragment.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="240dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:focusableInTouchMode="true"
        android:id="@+id/container_linear"
        android:gravity="center"
        android:orientation="vertical">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop" />
    </LinearLayout>

</LinearLayout>

MyActivity.xml

<android.support.v4.view.ViewPager
                    android:id="@+id/product_view_pager"
                    android:layout_width="match_parent"
                    android:layout_height="240dp"
                    android:layout_marginLeft="4dp"
                    android:layout_marginRight="4dp"
                    android:gravity="center"
                    android:overScrollMode="never" />

MyFragment.class(我使用Butterknife绑定视图)

@BindView(R.id.container_linear)
LinearLayout mContainer;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View mRootView = inflater.inflate(R.layout.my_layout, container, false);
    ButterKnife.bind(this, mRootView);

    mContainer.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("Test", "Clicked!");
        }
    });
}

感谢您的支持。

3 个答案:

答案 0 :(得分:0)

要考虑的一件事是将OnClickListener移动到您设置为可点击的父LinearLayout,看看是否有帮助。

另一件事是将android:focusableInTouchMode="true"添加到您将OnClickListener附加到的视图中。

除此之外,您可能希望共享用于注册OnClickListener的代码,以便我们调查其他可能的错误。

答案 1 :(得分:0)

如果我理解正确,您想点击MyPageFragment.xml内的图片视图。这很简单,但您需要ID ImageView,并在onCreateView方法中引用它,就像使用LinearLayout一样,然后在onClickListener上使用clickable="false"图像。

  

所以在最近的谈话中,似乎在线性布局中你需要删除<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:duplicateParentState="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="240dp" android:layout_marginLeft="16dp" android:layout_marginRight="16dp" android:focusableInTouchMode="true" android:id="@+id/container_linear" android:gravity="center" android:orientation="vertical"> <--you need to give ID to the view to be able to perform events on them specifically.--> <ImageView android:id="@+id/my_awesome_image" android:layout_width="match_parent" android:layout_height="wrap_content" android:scaleType="centerCrop" /> </LinearLayout>

     

基本上,它已阻止其子项的所有点击,因此线性布局以及imageview点击不适合您。看到这段代码我删除了那一行。希望这有效

请遵守此准则。

MyPageFragment.xml

@BindView(R.id.container_linear)
LinearLayout mContainer;
//declare with butterknife
@BindView(R.id.my_awesome_image)
ImageView myAwesomeImage;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
                     @Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View mRootView = inflater.inflate(R.layout.my_layout, container, false);
    ButterKnife.bind(this, mRootView);

     //you set click listener previously on entire linear layout instead of imageview 
     //that's why it was not reflecting on imageview click.


    myAwesomeImage.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d(TAG , "Awesome Imageview clicked!");
        }
    });
}

现在在你的MyFragment.class

HTTP/1.1 200 OK
Server: Payara Micro #badassfish

答案 2 :(得分:0)

我使用以下代码块解决了这个问题:

@Override
public void onViewCreated(View view, Bundle savedInstanceState){

    view.setOnClickListener(new OnClickListener(){
        public void onClick(View v){

            /*  Do as you please here. */
        }
    });
}

此答案的参考资料可在此处查看:How to detect click on ImageView in ViewPager's PagerAdapter (android)?