gpt4 book ai didi

android - RecyclerView NotifyItemInserted

转载 作者:太空狗 更新时间:2023-10-29 13:48:02 28 4
gpt4 key购买 nike

我有一个 RecyclerView.Adapter 带有 hasStableIds(true); 和一个 LinearLayoutManager 带有 reverseLayout(true);

我向适配器中的对象列表插入一个新项,然后调用 NotifyItemInserted(0)。列表颠倒过来,从下到上加载,新项目 始终位于底部。

问题是在调用 NotifyItemInserted 时,所有 ViewHolder 都“刷新”/“重新加载”/“重新创建”- viewholder 有点复杂,不希望每次都重新创建它们.

当我调试解决方案时,OnBindViewHolder 从位置 0(这是正确的)开始,然后根据屏幕上的项目数量上升到位置 10 或 11,然后重新创建所有项目。

我在 adapterlayoutmanagerrecyclerview 上尝试了很多不同的设置,但都不起作用。

我看到有一个负载可以在 NotifyItemChanged 中传递,但不能在 NotifyItemInserted 中传递。也许有了有效载荷,我可以检查该项目是否已经在屏幕上并且不再重新创建它,我不知道该怎么做。

我正在使用 Xamarin.Android 但这应该不是问题。

最佳答案

删除 hasStableIds(true) 应该可以解决您的问题。

原因:

当您将 hasStableIds 设置为 true 时,Adapter 假定每个项目都有一个唯一的 ID,并且它使用从getItemId(int position) 方法为您设置动画数据更改。

这是一种毫不费力地为变化设置动画的简单方法(只要 getItemId(int position) 真的为每个项目返回一个唯一的 id,否则你会崩溃)。

但在您的情况下,您希望自己对变化进行动画处理并控制哪些项目将被重新渲染,哪些不会。

关于android - RecyclerView NotifyItemInserted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51151055/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com