我为我的项目实现了新的ViewPager。viewPager2包含一个片段列表
private class ViewPagerAdapter extends FragmentStateAdapter {
private ArrayList<Integer> classifiedIds;
ViewPagerAdapter(@NonNull Fragment fragment, final ArrayList<Integer> classifiedIds) {
super(fragment);
this.classifiedIds = classifiedIds;
}
@NonNull
@Override
public Fragment createFragment(int position) {
return DetailsFragment.newInstance(classifiedIds.get(position));
}
@Override
public int getItemCount() {
return classifiedIds.size();
}
}
在片段内部,我得到了一个水平recyclerView
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false);
recyclerViewPicture.setLayoutManager(layoutManager);
问题是当我试图滚动回收器查看视图分页器采取触摸和交换到下一个片段
当我使用旧的ViewPager时,我没有这个问题
5条答案
按热度按时间qni6mghb1#
我遇到了同样的问题:使用AndroidX,ViewPager2(具有水平方向)在其页面之一内具有RecyclerView(具有水平方向)。
我找到的工作解决方案来自Google IssueTracker。下面是我对Kotlin类的Java翻译:
然后,只需将嵌套的RecyclerView嵌入到NestedScrollableHost容器中:
它解决了嵌套的RecyclerView和它的宿主ViewPager2之间的滚动冲突。
yk9xbfzb2#
我找到了一个解决方案,这是一个已知的bug,正如你在这里看到的https://issuetracker.google.com/issues/123006042,也许他们会在下一次更新中解决它。
感谢TakeInfos和链接内的示例项目
我正在检查用户是向右滚动还是向左滚动。如果用户到达recyclerView的末尾或开头,我将启用或禁用视图分页器上的滑动
00jrzges3#
在我看来,这个解决方案(从Daniel Knauf post偷来的)比创建一个 Package 器要简单得多,但仍然不是官方的:
vqlkdk9b4#
最简单的是这样的:首先收听页面更改,并在您拥有recyclerView的页面上禁用触摸:
然后在您希望用户能够滑动页面的视图上,执行以下操作:
根据您的逻辑,您可能必须将myPager对象传递给recycleView Fragment。
kqhtkvqz5#
调用
ViewGroup#onInterceptTouchEvent(MotionEvent).
参见本文档