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

Posted

技术标签:

【中文标题】Onclick on view pager in android 在我的代码中不起作用【英文标题】:Onclick on view pager in android does not work in my code 【发布时间】:2014-02-18 06:18:54 【问题描述】:

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

viewpager.setOnClickListener(new OnClickListener() 

    @Override
    public void onClick(View v) 
    
        Log.i("***","***");
        Toast.makeText(getActivity(), "XXXX", Toast.LENGTH_SHORT).show();
    
);

【问题讨论】:

【参考方案1】:

我实现了自定义ViewPager

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;
        
    

以及如何实现onClickListener的例子:

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

【讨论】:

这是一个更好的答案。一个监听器用于整个 viewPager,而不是一个监听器用于其中的每个视图。这应该是公认的答案。一直在搜索几个小时才能找到这个! @Birrel 这个实现对你有用吗?对我来说,ViewPager 的 OnTouchListener 仅在我执行滚动时触发,单击被忽略。 @aleien,对不起,我不记得了。自从我使用这个解决方案以来,我几乎一直在编写 php,所以我需要一些 加快速度,然后才能查看我所做的并理解它。只是现在没有时间。根据我的评论,看起来部分或全部都解决了。对不起,我不能更有用。 @Gaket 你没有收到 onSingleTapConfirmed 事件? 不。我在那里放了一个调试中断,添加了一个 Log 语句以确保但没有调用回调。【参考方案2】:

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

【讨论】:

我也在我的适配器内部使用过(instantiateItem()) 但它不起作用? 告诉我你用过什么? 与我的视图寻呼适配器类相比,是否可以在我的活动中实现点击侦听器? 你可以在activity中实现并且可以为Adapter类设置相同的监听器。给我看代码,然后我会展示它是如何完成的【参考方案3】:

ViewPager 中没有 onClick 监听器,你可以使用 Recyclerview 代替 ViewPager 来达到同样的效果,如下所示

<android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view_scroll_page"
        android:layout_
        android:layout_
        android:orientation="horizontal"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>

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

【讨论】:

以上是关于Onclick on view pager in android 在我的代码中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

片段无法加载到 View_pager tabLayout [重复]

Pager View Controller 的根视图的大小与后续 View Controller 的大小不同

如何在 View Pager 中使用滑动抽屉?

无法更新 View Pager 中的中间片段。

如何创建带有点指示器的 Android View Pager?

隐藏在标签栏后面的 View Pager 的片段