所以,假设我有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,那么滚动效果会变得非常流畅......
我不确定是否应该在此处放置片段代码,因为它们之间没有特定的区别。
答案 0 :(得分:2)
使用WebDriver
将FragmentB置于FragmentA之上,因此它仍然存在并且正在下面绘制。当您使用add
时,FragmentA将被分离并且其视图将被破坏。
如果您在两个片段中使用相同的适配器,请考虑在您的活动replace
中创建RecyclerView.RecycledViewPool,然后在回收站之间共享它,这样任一片段都可以获取现有的ViewHolders而不是重新创建它们当附上时:
片段onCreateView():
onCreate()