嵌套Android ViewPager,在ListView中水平滑动ListItems

Tho*_*ten 12 android listview nested android-viewpager

我在活动的根级别上有一个ViewPager.

寻呼机的每个页面都包含一个ListFragment(由FragmentPagerAdapter支持).

某些列表视图项应另外包含ViewPagers以支持滑动这些项的内容(例如列表项内的水平库).

如何嵌套查看寻呼机?ViewPager - > ListView(在页面中) - > ViewPager(在列表项中)

我可以水平滑动ListFragments,我可以垂直滑动整个列表,但我不能在列表项内滑动.

And*_*yld 11

OnTouchListener在内部添加了一个ViewPager:

private OnTouchListener mSuppressInterceptListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(
                event.getAction() == MotionEvent.ACTION_DOWN &&
                v instanceof ViewGroup
        ) {
                ((ViewGroup) v).requestDisallowInterceptTouchEvent(true);
        }
        return false;
    }
};
Run Code Online (Sandbox Code Playgroud)

这只是检测内部的ACTION_DOWN触摸事件ViewPager并防止外部触发事件.因为它返回false,所以只应该触发ACTION_DOWN事件; 所有其他事件都将被忽略.你可以将这个监听器添加到你想要"保护"外部ViewPager滚动的每个元素上,但很明显,如果你想在触摸监听器内部需要处理它们的那些元素上拾取任何其他触摸行为,并且可能实现更好的倾听者.

感谢@Rodja,他首先给了我这个想法.

  • 哇.更清洁.谢谢! (2认同)

Mat*_*uno 0

您无法真正嵌套需要相同手势来控制的元素。由于视图寻呼机已经捕获水平运动,因此您的嵌套元素将无法捕获它。您可能可以做很多工作来通过管理焦点等来解决这个问题 - 但最终您的应用程序会让用户感到困惑。最好不要嵌套使用相同交互的元素......在这种情况下,两个视图寻呼机都在监视左右运动。