android中的Onclick-on-view-pager在我的代码中不起作用

android中的Onclick-on-view-pager在我的代码中不起作用,android,view,android-viewpager,Android,View,Android Viewpager,我已经在我的代码中实现了视图寻呼机,并且我在视图寻呼机上设置了点击侦听器,但是我的点击侦听器不工作,我将发布我的代码 viewpager.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Log.i("***","***"); Toast.makeText(getActivity(), "XXXX", Toast.LENG

我已经在我的代码中实现了视图寻呼机,并且我在视图寻呼机上设置了点击侦听器,但是我的点击侦听器不工作,我将发布我的代码

viewpager.setOnClickListener(new OnClickListener() 
{
    @Override
    public void onClick(View v) 
    {
        Log.i("***","***");
        Toast.makeText(getActivity(), "XXXX", Toast.LENGTH_SHORT).show();
    }
});

使用点击查看页面项目内的监听器。这不起作用,因为ViewPager的子级正在拦截父级(即ViewPager)的事件。例如,如果您使用PagerAdapter在ViewPager中添加ImageView,则使用单击ImageView使其变得简单

public class ClickableViewPager extends ViewPager {

    private OnClickListener mOnClickListener;

    public ClickableViewPager(Context context) {
        super(context);

        setup();
    }

    public ClickableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);

        setup();
    }

    private void setup() {
        final GestureDetector tapGestureDetector = new GestureDetector(getContext(), new TapGestureListener());

        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                tapGestureDetector.onTouchEvent(event);

                return false;
            }
        });
    }

    public void setOnViewPagerClickListener(OnClickListener onClickListener) {
        mOnClickListener = onClickListener;
    }

    public interface OnClickListener {
        void onViewPagerClick(ViewPager viewPager);
    }

    private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            if(mOnClickListener != null) {
               mOnClickListener.onViewPagerClick(ClickableViewPager.this);
            }

            return true;
        }
    }
}
ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
mViewPager.setOnViewPagerClickListener(new ClickableViewPager.OnClickListener() {
            @Override
            public void onViewPagerClick(ViewPager viewPager) {
                //yourCode
            }
        });
以及如何实现
onClickListener
的示例:

public class ClickableViewPager extends ViewPager {

    private OnClickListener mOnClickListener;

    public ClickableViewPager(Context context) {
        super(context);

        setup();
    }

    public ClickableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);

        setup();
    }

    private void setup() {
        final GestureDetector tapGestureDetector = new GestureDetector(getContext(), new TapGestureListener());

        setOnTouchListener(new OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                tapGestureDetector.onTouchEvent(event);

                return false;
            }
        });
    }

    public void setOnViewPagerClickListener(OnClickListener onClickListener) {
        mOnClickListener = onClickListener;
    }

    public interface OnClickListener {
        void onViewPagerClick(ViewPager viewPager);
    }

    private class TapGestureListener extends GestureDetector.SimpleOnGestureListener {

        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            if(mOnClickListener != null) {
               mOnClickListener.onViewPagerClick(ClickableViewPager.this);
            }

            return true;
        }
    }
}
ClickableViewPager viewPager = (ClickableViewPager) findViewById(R.id.viewPager);
mViewPager.setOnViewPagerClickListener(new ClickableViewPager.OnClickListener() {
            @Override
            public void onViewPagerClick(ViewPager viewPager) {
                //yourCode
            }
        });

ViewPager中没有onClick侦听器,您可以使用Recyclerview而不是ViewPager来使用相同的效果,如下所示

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_scroll_page"
        android:layout_width="wrap_content"
        android:layout_height="250dp"
        android:orientation="horizontal"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>


使用Recyclerview作为水平,然后您可以滚动它并获取单击事件。请注意,使用RecyclerView.Adapter

我也在我的适配器(InstanceItem())中使用过,但它不起作用?显示您使用了什么?与我的视图寻呼机适配器类相比,是否可以在我的活动中实现click listener?您可以在活动中实现,也可以将相同的侦听器设置为适配器类。告诉我代码,然后我会告诉你怎么做这是一个更好的答案。一个侦听器用于整个viewPager,而不是其中每个视图一个侦听器。这应该是公认的答案。我已经找了好几个小时了@Birrel这个实现对您有用吗?对我来说,只有当我执行滚动时,ViewPager的OnTouchListener才会启动,一次点击被忽略。@aleien,对不起,我记不起来了。自从我使用这个解决方案以来,我几乎一直只编写PHP,所以在我能够了解我所做的事情并理解它之前,我需要一些时间来提高速度。只是现在没时间。根据我的评论,看起来部分或全部都成功了。对不起,我不能再有用了。@Gaket您没有收到OnSingletAPconfirfied事件?没有。我在那里设置了一个调试中断,添加了一个Log语句以确保没有调用回调。