【问题标题】:OnItemClickListener doesnt get called when using ViewPager in a Listview在 Listview 中使用 ViewPager 时不会调用 OnItemClickListener
【发布时间】:2014-03-19 18:34:58
【问题描述】:

我在ListView 中有一个ViewPager。一切正常(列表视图中的垂直滚动/ViewPager 中的水平滚动)。但是我在捕捉列表视图项目上的点击事件时遇到问题(viewpager 填充了列表视图项目)。

到目前为止我尝试过

  • 将列表视图设置为可点击

  • 扩展了 Viewpager 并添加了一个手势检测器,用于检测水平滚动并设置 requestDisallowInterceptTouchEvent(false)如果手势不是水平滚动

  • 为我的列表视图设置setOnItemClickListener

问题setOnItemClickListener 没有被调用

我也尝试将 onclick 列表器直接添加到 viewPager,但也没有调用该列表器

基本上我正在寻找一种解决方案,我可以检测到对列表视图项或页面查看器的点击并启动一个意图。

P.S 任何关于 android 如何处理视图上的触摸事件的链接也将不胜感激

【问题讨论】:

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


    【解决方案1】:

    您已经接近了,但不是在 ViewPager 本身上设置 onClickListener,您必须为 ViewPagerPagerAdapter 中的视图设置 onClickListener(您必须扩展)。

    在您的ListViewgetView() 中实例化ViewPager,为您的PagerAdapter 设置一个适配器(这里称为“ExtendedPagerAdapter):

    ViewPager pager = (ViewPager) container.findViewById(R.id.pager);
    ExtendedPagerAdapter adapter = new ExtendedPagerAdapter(context, list);
    pager.setAdapter(adapter);
    

    然后,在您的 ExtendedPagerAdapter 类中,您覆盖(除其他外)instantiateItem(ViewGroup, int)

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        LayoutInflater inflater = (LayoutInflater)
            context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View theView = list.get(position).getView(inflater);
    
        theView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //perform action
            }
        });
    
        container.addView(theView, 0);
        return theView;
    }
    

    【讨论】:

    • 我有同样的问题,但我不想将监听器设置为 ViewPager ,我需要通过 onItemClickListener 将其设置为项目,有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多