Android 当孩子们的身高不同时,RecyclerView在向上滚动时会抖动

Android 当孩子们的身高不同时,RecyclerView在向上滚动时会抖动,android,android-recyclerview,kotlin,Android,Android Recyclerview,Kotlin,我的UI由一个RecyclerView组成,它在TextView中显示文本条目。实现并不复杂,ViewHolder将textView存储在一个字段中,而onBindViewHolder只需在其上调用textView.setText private List<String> entries; override fun onBindViewHolder(holder: TextHolder, position: Int) { holder.textView.text = ent

我的UI由一个RecyclerView组成,它在TextView中显示文本条目。实现并不复杂,ViewHolder将textView存储在一个字段中,而
onBindViewHolder
只需在其上调用
textView.setText

private List<String> entries;

override fun onBindViewHolder(holder: TextHolder, position: Int) {
    holder.textView.text = entries[position];
}
私有列表条目;
覆盖BindViewHolder(holder:TextHolder,position:Int){
holder.textView.text=条目[位置];
}
当条目较短时,没有问题。然而,当一些或所有条目都很长(比如屏幕长度的2或3倍)时,它会在向上滚动时引起突然的抖动,我发现这非常不和谐。这看起来不像是一个延迟,RecyclerView只是平滑地滚动,然后立即向上跳。它发生在我轻弹和缓慢拖动时


有人知道这是什么原因吗?这里有办法解决吗?

如果RecyclerView适配器中的某个元素具有特定的视图类型,RecyclerView也会假定它具有一致的高度。这将导致RecyclerView在滚动时失去跟踪

我通过在适配器中重写
getItemViewType
时为不同大小的元素分配不同的
ViewType
来解决这个问题。如果您的项目高度不同,但在其他方面显示一致,则此功能将起作用


您可以尝试的另一件事是在适配器的
onBindViewHolder()
方法中重置子视图的
LayoutParams
。这可能会导致它刷新父布局并通知子布局的更新状态。

谢谢您的建议!“不同视图类型”方法非常有效!