ViewPager 中存在多个嵌套的 NestedScrollView 无法滚动。

4
我有一个ViewPager,每个页面显示不同的片段。所有片段都有一个NestedScrollView作为它们的根视图。因此本质上是这样的:
first_fragment_layout.xml:
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="4dp"/>

</android.support.v4.widget.NestedScrollView>

second_fragment_layout.xml:

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <!-- Various irrelevant views -->

    </LinearLayout>

</android.support.v4.widget.NestedScrollView>

“等等”
“通过我的FragmentPagerAdapter类实例化片段,如下所示:”
private class ViewPagerAdapter extends FragmentPagerAdapter
{
    private final List<String> mFragmentNameList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int position)
    {
        return Fragment.instantiate(getContext(), mFragmentNameList.get(position));
    }

    @Override
    public int getCount()
    {
        return mFragmentNameList.size();
    }

    void add(String fragmentName)
    {
        mFragmentNameList.add(fragmentName);
    }
}

我的问题是NestedScrollView一次只能在一个片段上滚动(通常不是当前页面的片段)。似乎存在一个问题,每次只有一个NestedScrollView可以处于活动状态(首先被填充的那个)。我推断这是因为能够滚动的片段总是直接相邻于无法滚动的片段,并且ViewPager默认在内存中保留最多两个片段(即 ViewPager.setOffscreenPageLimit(int limit)默认为1)。
1个回答

4

我花了20分钟休息时间,马上就解决了它。ViewPager需要启用嵌套滚动,可以通过xml中的android:nestedScrollingEnabled="true"或通过编程方式使用ViewCompat.setNestedScrollingEnabled(viewPager, true)(仅适用于API 21及以上版本)来实现。


是的,关于这个问题在 Stack 上已经有很多类似的提问了! - Uttam Panchasara
@UttamPanchasara 我搜索了一下,但没有找到。有很多关于嵌套滚动的内容,但没有关于在ViewPager内部的。 - Thomas Bradford
@Uttam:你能否通过投票将其标记为重复问题并提出建议? - halfer
我休息了一段时间,找到了这个答案,又想起来了。是的,在SO上有重复的问题,但它们也需要可搜索性。所以谢谢 :) - jobbert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接