我正在使用RecyclerView
,其中getItemCount()
涉及一个布尔值。此布尔值控制RecyclerView
中最后一项的可见性,有点像加载更多视图,但略有不同。有时,此布尔值会发生变化,因此RecyclerView
将知道是否包含最后一项。
代码看起来像这样
@Override
public int getItemCount() {
return mItemArray.size() + (shouldShow ? 1 : 0);
}
当shouldShow
的值更新时,我不会调用notifyDataSetChanged()
或notifyItemChanged()
,但RecyclerView
仍会正确更新。但我担心它最终会导致RecyclerView
因为不一致而崩溃。我的问题是,
getItemCount()
中使用动态布尔值控制RecyclerView
大小的正确方法吗?notify...()
吗?RecyclerView
会因为不一致而崩溃吗?答案 0 :(得分:0)
1.不是问题,直到你传递int 2.没有必要调用notifydatasetchanged(我们应该在适配器数据发生变化时调用它们) 3.没有任何一致性
答案 1 :(得分:0)
1.没关系
2.如果您希望在布尔变量更改后立即显示最后一项,则应调用notifyDataSetChanged()
,因为在滚动回收器视图之前,适配器不会调用getItemCount()
。
3.如果您不处理所有行为,应用程序可能会崩溃。例如,您从mItemArray
onBindViewHolder()
方法中取一些项目,当getItemCount()
返回的数字大于数组大小时,应用会抛出IndexOutOfBoundException
。在这种情况下,您应该检查位置是否小于数组的大小。
if (position < mItemArray.size()){
//you can get item from the array
} else {
//handle your additional item
}