因此,我正在尝试遵循分页库。在大多数示例中,它们具有类似以下内容:
@Override
public void onBindViewHolder(@NonNull PokemonViewHolder pokemonViewHolder, int i) {
Pokemon pokemon = getItem(i);
if (pokemon != null) { // <-- why this check here?
pokemonViewHolder.bind(pokemon);
}
}
为什么必须检查适配器中的项目是否为空?我不了解PagedListAdapter流的内部。有人可以解释吗?
我的猜测是,在适配器上有一个观察者,一旦数据源更新,该适配器将在某个时刻从UI线程“改变”适配器的内容,从而该项目的位置已经过时了?
答案 0 :(得分:1)
在官方文档中对此进行了解释:
@Override
public void onBindViewHolder(UserViewHolder holder, int position) {
User user = getItem(position);
if (user != null) {
holder.bindTo(user);
} else {
// Null defines a placeholder item - PagedListAdapter will automatically invalidate
// this row when the actual object is loaded from the database
holder.clear();
}
}
答案 1 :(得分:1)
PagedList
始终具有数据集的完整大小。的PagedList
在默认情况下将为未加载的数据返回null 还。这意味着在适配器中,我们确实需要记住检查 在我们的bind方法中为null。
http://blog.abnormallydriven.com/2017/09/30/introducing-the-paging-library/