【问题标题】:Onclick on view pager in android does not work in my codeOnclick on view pager in android 在我的代码中不起作用
【发布时间】: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();
    }
});

【问题讨论】:

    标签: android view android-viewpager


    【解决方案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_width="wrap_content"
            android:layout_height="250dp"
            android:orientation="horizontal"
            app:layoutManager="android.support.v7.widget.LinearLayoutManager"/>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 2021-12-18
      • 2018-04-24
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多