viewpager 中的 RecyclerView

RecyclerView inside viewpager

我尝试实现如下图所示的布局。

在此布局中,第一个 ViewPager 具有固定高度,第二个 Viewpager 包含 RecyclerView

如何将 Viewpager 中的滚动 RecyclerView 连接到父级中的 NestedScrollView

我试试这个: nestedScrollView.isFillViewport = trueRecyclerViewViewpager 的顶部开始滚动。

在 XML

中的 RecyclerView 中设置这些行
android:nestedScrollingEnabled="false"
android:height="wrap_content"

我前段时间遇到过这个问题。您希望 RecyclerView 滚动到 NestedScrollView 的位置。 nestedScrollingEnabled 不会帮助你,因为 RecyclerViewViewPager.

里面

解决方案 您可以自定义 ViewPager 以将 ViewPager 的大小调整为从 页面滑动时的当前页面大小。 =24=]

您可以使用以下代码:

 public class WrapContentViewPager extends ViewPager {

        private int mCurrentPagePosition = 0;

        public WrapContentViewPager(Context context) {
            super(context);
        }

        public WrapContentViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        try {
             boolean wrapHeight = MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST;
             if (wrapHeight) {
                 View child = getChildAt(mCurrentPagePosition);
                 if (child != null) {
                 child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
                 int h = child.getMeasuredHeight();

                 heightMeasureSpec = MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY);
                }
            }
    } catch (Exception e) {
        e.printStackTrace();
    }
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

        public void reMeasureCurrentPage(int position) {
            mCurrentPagePosition = position;
            requestLayout();
        }
    }

在xml中声明:

    <your.package.name.WrapContentViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    </your.package.name.WrapContentViewPager>

之后在页面滑动时调用 reMeasureCurrentpage 函数。

    final WrapContentViewPager wrapContentViewPager = (WrapContentViewPager) findViewById(R.id.view_pager);

    wrapContentViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    wrapContentViewPager.reMeasureCurrentPage(wrapContentViewPager.getCurrentItem());
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });

同时将 android:nestedScrollingEnabled="false" 设置为您的 RecyclerView

让你的布局像这样行得通