ViewPager中的多个NestedScrollViews不滚动

时间:2017-07-13 01:13:58

标签: android android-layout

我有一个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中的内存中最多保留两个片段(即{{1}默认为1)

1 个答案:

答案 0 :(得分:0)

休息了20分钟并立即解决了。 ViewPager需要启用嵌套滚动,可以通过xml android:nestedScrollingEnabled="true"或通过ViewCompat.setNestedScrollingEnabled(viewPager, true)编程(仅限&gt; = API 21)