RecyclerView - 通过布尔值

时间:2017-03-29 16:33:03

标签: android android-recyclerview android-adapter notifydatasetchanged

我正在使用RecyclerView,其中getItemCount()涉及一个布尔值。此布尔值控制RecyclerView中最后一项的可见性,有点像加载更多视图,但略有不同。有时,此布尔值会发生变化,因此RecyclerView将知道是否包含最后一项。

代码看起来像这样

@Override
public int getItemCount() {
    return mItemArray.size() + (shouldShow ? 1 : 0); 
}

shouldShow的值更新时,我不会调用notifyDataSetChanged()notifyItemChanged(),但RecyclerView仍会正确更新。但我担心它最终会导致RecyclerView因为不一致而崩溃。我的问题是,

  1. getItemCount()中使用动态布尔值控制RecyclerView大小的正确方法吗?
  2. 当此布尔值发生变化时,我应该调用notify...()吗?
  3. 由于这个原因,我的RecyclerView会因为不一致而崩溃吗?

2 个答案:

答案 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
}