我读了太多关于这方面的文章。我尝试了所有类型的排列&组合回收视图方法,如setHasFixedSize(true)、setNestedScrollingEnabled(false)、setItemViewCacheSize(20)等。但我的预测如下:
是Jank第一次出现的主要原因,因为它第一次动态地将值加载到内存中。当它关闭时,它已经有了一些预加载的元素
exactly 5-6 items).Once时,它的列表视图真的非常快,我的意思是比其他任何东西都快。close my app without killing it from background并再次打开它,它不会滞后。我的问题:
load the values onto memory dynamically before user interaction, Like showing a splash screen and load the layout in background thread的路吗?我尝试过启动屏幕,但是这个问题是如何将布局加载到内存中。注意:主容器是ConstraintLayout with custom background &我的层次结构是完全平坦的,但是有3个按钮有drawable icons和custom background,one material shapable imageview,一个带有custom thumb and custom progress drawable和frameLayout的滑块。
发布于 2022-11-15 20:20:23
确保覆盖:
getItemViewType(…)来自文档返回处于位置的项目的视图类型,以便进行视图回收。 此方法的默认实现返回0,使适配器假设为单一视图类型。与ListView适配器不同,类型不一定是连续的。考虑使用id资源来唯一标识项视图类型。
如果有不同的视图类型,则返回标识上述视图类型的int,否则不需要重写。
getItemId(…)来自文档返回位于位置的项目的稳定ID。如果hasStableIds返回false,则该方法应该返回NO_ID。该方法的默认实现返回NO_ID。
这意味着函数必须为每个项返回一个唯一的id。如果有,请使用对象的id,否则尝试使用hashCode:
@Override
public long getItemId(int position) {
return itemList.get(position).hashCode();
}如果实现得当,请使用setHasStableIds(true)。来自文档
指示数据集中的每个项是否可以用类型为java.lang.Long的唯一标识符表示。
getItemCount(…)来自文档返回适配器所持有的数据集中的项目总数。
只需列出列表中的项目数。
@Override
public int getItemCount() {
return itemList.size();
}https://stackoverflow.com/questions/74434758
复制相似问题