【发布时间】:2021-05-11 20:04:44
【问题描述】:
我显示设备的联系人列表。在我的带有 Android 版本 9 的三星 Galaxy S8 中,当我第一次滚动 recyclerView 时,它并不流畅并且有点滞后。但随后它开始非常顺利地滚动。如果我使用后退按钮关闭应用程序并再次启动应用程序,它会再次平滑滚动,但如果我从最近的历史记录中销毁应用程序实例,然后再次启动应用程序,它会不平滑并且在第一次滚动时有点滞后。 (我在Google Pixel2中测试过,当buttery低时,我感觉和我解释的一样。)
这是 Galaxy s8 中问题的记录屏幕:https://drive.google.com/file/d/1szfF1oKEYZK3LIqQHC-MsapRxdJ85bFy/view?usp=sharing
我尽可能优化了recyclerView 适配器,似乎问题与我的适配器无关。你可以在这里查看源代码:https://github.com/AliRezaeiii/DignityContacts
我有一个自定义的 CoordinatorLayout.Behavior 来隐藏/显示 AppBarLayout 以及 bottomBar。我确信这与此无关,因为当没有 CoordinatorLayout 行为时,它会再次显示滞后,正如我上面解释的那样。
这是我的 recyclerView 项目布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="vertical">
<include layout="@layout/contact_separator" />
<include layout="@layout/contact_detail" />
<LinearLayout
android:id="@+id/subItem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>
contact_separator 和 contact_detail 都是 ConstaintLayouts。
这是我设置 recyclerView 的方法:
mAdapter = new ContactsAdapter();
binding.recyclerView.setHasFixedSize(true);
binding.recyclerView.setAdapter(mAdapter);
final Observer<Resource<List<Contact>>> contactsObserver = resource -> {
if (resource instanceof Resource.Success) {
mContacts = ((Resource.Success<List<Contact>>) resource).getData();
mAdapter.setItems(mContacts, true);
}
};
这可能是什么原因?
【问题讨论】:
标签: android android-recyclerview android-adapter