【问题标题】:OnTouchListener for ViewPager2ViewPager2 的 OnTouchListener
【发布时间】:2020-04-09 10:39:44
【问题描述】:

我最近将应用程序中的 ViewPager 更改为 ViewPager2。我已经为 viewPager 对象设置了一个 onTouchListener 来检测手势(onFling 和 onLongPress),如下所示:

mViewPager.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        mDetector.onTouchEvent(motionEvent); // use the custom gesture detector to detect onFling and onLongPress touch events.
        return true; 
    }
});

在重构为 ViewPager2 之前,viewPager 的 onTouchListener 工作正常。我试过this answer,但没用。

任何人都知道为什么会出现这种情况以及我该如何解决?

【问题讨论】:

    标签: android android-viewpager ontouchlistener android-viewpager2


    【解决方案1】:

    因为ViewPager2是一个ViewGroup,所以最终的目标是里面的recyclerview。没有调用setOnTouchListener,因为recyclerview拦截了事件,先调用了onTouchEvent。

    添加自定义onTouch逻辑的正确方法是调用

    mViewPager.getChildAt(0).setOnTouchListener{...}
    

    【讨论】:

    • 这段代码必须放在哪里?我在几个地方(当我创建 viewpager、页面选择、页面内部 onCreateView 和 onViewCreated)尝试了不同的子位置,但从未工作过。
    【解决方案2】:

    添加自定义onTouch逻辑的正确方法是调用

    viewPager2.getChildAt(viewPager2.getCurrentItem()).setOnTouchListener(...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多