[英]Android ViewPager2 with fragment containing a recyclerview not scrolling
我正在使用 ViewPager2 和 FragmentStateAdapter 來綁定片段。 我的每個片段都有 3 個垂直布局的回收站視圖。 問題是我無法在片段內滾動回收器視圖,而且當我嘗試垂直滾動內容時,視圖尋呼機會更改選項卡。 如何解決這個問題?
實際上 ViewPager2 不支持嵌套的 Scrollable 元素,因此要支持具有相同方向的 ViewPager2 對象內的滾動視圖,您必須調用 requestDisallowInterceptTouchEvent() 或將您的嵌套滾動視圖包裝在此類中。
此外,您可以閱讀本文以了解如何在 ViewPager2 中支持嵌套的可滾動元素
嘗試 view_pager.setUserInputEnabled(false),它對我有用。
來自https://medium.com/@ankurg22/viewpager2-on-the-outside-recyclerview-inside-a005adb5d63d
我遇到了同樣的問題,我有三個帶有垂直 recyclerview 的頁面,每個頁面都是 viewpager2 中的一個單獨的片段。
我正在做的是計算 x 和 y 方向的滾動,如果 y 方向的滾動更多,我將禁用觸摸。
public class CustomScrollHost extends FrameLayout {
private float xDistance, yDistance, lastX, lastY;
public CustomScrollHost(@NonNull Context context) {
super(context);
}
public CustomScrollHost(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public CustomScrollHost(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public CustomScrollHost(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
lastX = ev.getX();
lastY = ev.getY();
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
xDistance += Math.abs(curX - lastX);
yDistance += Math.abs(curY - lastY);
lastX = curX;
lastY = curY;
Log.d("CustomScrollHost", "xDistance " + xDistance);
Log.d("CustomScrollHost", "yDistance " + yDistance);
getParent().requestDisallowInterceptTouchEvent(yDistance > xDistance);
}
return super.onInterceptTouchEvent(ev);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.