为什么默认仪强迫更改的视图持有人重新创建?

问题描述 投票:0回答:1
,所以我基本上遇到了最近的问题(我在此处描述了问题:

recyClerviewRecoreating视图持有人而不是重新介绍)。我发现的是,

RecyclerView
内部ItemAnimator决定是否只需要反弹或应该创建和交叉一个新的视图持有人。
本文解释了一些事情:
Https://medium.com/android-news/anatomy-of-recyclerview-part-part-part-1-a-search-for-a-viewholder-contine-d81c631a2b91

我假设这是决定应发生的事情的默认驱动器的一部分:

RecyclerView

告诉我问题的解决方案是只用一些任意的有效载荷来致电ViewHolder

,它始终重复使用

/** * {@inheritDoc} * <p> * If the payload list is not empty, DefaultItemAnimator returns <code>true</code>. * When this is the case: * <ul> * <li>If you override {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, both * ViewHolder arguments will be the same instance. * </li> * <li> * If you are not overriding {@link #animateChange(RecyclerView.ViewHolder, RecyclerView.ViewHolder, int, int, int, int)}, * then DefaultItemAnimator will call {@link #animateMove(RecyclerView.ViewHolder, int, int, int, int)} and * run a move animation instead. * </li> * </ul> */ @Override public boolean canReuseUpdatedViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, @NonNull List<Object> payloads) { return !payloads.isEmpty() || super.canReuseUpdatedViewHolder(viewHolder, payloads); }

。 我的问题:
现在,我想知道为什么以及何时会更好地重新创建整个
onItemRangeChanged()

并交叉crossfade,而不仅仅是更新它的特定部分?在上面提到的跨推荐问题中,我只是在改变了视图持有人的一小部分的可见性,但是重新创建了整个内容,我认为这是更差的表现吗?


    
	

记住

ViewHolder可以具有多个项目视图类型。当导致视图类型更改时,无论有效载荷如何,视图持有人都没有资格进行重复使用。 在这种情况下,通过更换视图持有人的动画师保持统一的行为。

此外,通过更新视图持有人,他们将不会经历适配器
ViewHolder

人们在布置新项目时可能会期望哪些适配器,而
android android-recyclerview android-viewholder
1个回答
1
投票

notifyItemChanged

则被称为被删除的物品。
如果您在随后的范围更新(无有效载荷)中遇到
onViewAttachedToWindow(holder)
电话,则应增加您的尺寸。

实际上,您可以避免重新读取。使用此代码:

onViewRecycled(holder)
	
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.