滚动时更新RecyclerView适配器会导致崩溃



我正在尝试更新包含许多视图类型的RecyclerView(notifyDataSetChanged或任何其他"changed"方法(,但如果在用户滚动时发生,则会导致崩溃。

崩溃的消息是一个ViewHolder无法转换为另一个。

示例

java.lang.ClassCastException:package.adapters.Adapter$AlphabetViewHolder不能强制转换为package.a适配器。Adapter$NumbersViewHolder

我的问题是:如何在用户滚动RecyclerView时更新它?我有什么特别的事情要做吗?

您需要在适配器中实现观察者模式和一些函数,以告诉观察者(在本例中是活动(何时根据项目的位置提供更多数据。

interface ScrollObserver {
fun notifyLoadMore(num: Int): Unit
}
class MainActivity: ScrollObserver {
...
override fun onCreate(savedInstanceState: Bundle?) {
...
adapter.scrollObserver = this
}
override fun notifyLoadMore(num: Int) {
loadMoreData(num)
updateRecyclerView()
}
}

在适配器中:

override fun onBindViewHolder(holder: QuestionViewHolder, position: Int) {
...
if (isTimeToLoadMore(position)) {
scrollObserver.notifyLoadMore(position)
}

您需要根据自己的需求来实现isTimeToLoadMore。这些类被简化了,而且绝对不适用于复制粘贴。但我希望你明白
您可以以几乎相同的方式观察带有viewmodel的适配器!

最新更新