片段$ add()会导致recyclerview的性能降低

时间:2018-01-19 09:26:38

标签: android android-fragments android-recyclerview

所以,假设我有recyclerview,它有一些元素。 Recyclerview位于FragmentA中,随方法replace添加。单击recyclelerview项时,FragmentB将使用方法add打开。 FragmentB中还有另一个Recyclerview,它与FragmentA中的recyclerview具有相同的适配器和相同的参数(固定大小,linearlayoutmanager等)。 FragmentA和FragmentB有相同的 xml

<RelativeLayout>
    <AppBarLayout>
        <Toolbar>
            <TextView />
        </Toolbar>
    </AppBarLayout>

            <SwipeRefreshLayout>
                <android.support.v7.widget.RecyclerView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:clipToPadding="false"
                    android:paddingTop="?attr/actionBarSize"
                    android:scrollbars="vertical" />
            </SwipeRefreshLayout>
</RelativeLayout>

问题是为什么在FragmentA中放置的recyclerview滚动非常顺利,并且FragmentB中放置的recyclelerview不够平滑滚动,看起来滚动效果由于性能不佳而具有低fps。

如果我使用方法replace而不是add打开FragmentB,那么滚动效果会变得非常流畅......

我不确定是否应该在此处放置片段代码,因为它们之间没有特定的区别。

1 个答案:

答案 0 :(得分:2)

使用WebDriver将FragmentB置于FragmentA之上,因此它仍然存在并且正在下面绘制。当您使用add时,FragmentA将被分离并且其视图将被破坏。

如果您在两个片段中使用相同的适配器,请考虑在您的活动replace中创建RecyclerView.RecycledViewPool,然后在回收站之间共享它,这样任一片段都可以获取现有的ViewHolders而不是重新创建它们当附上时:

片段onCreateView():

onCreate()