2

我使用RecyclerView,其中有一个布尔值涉及getItemCount()。该布尔值控制RecyclerView中最后一项的可见性,有点像加载更多视图,但略有不同。有时,这个布尔值的值会改变,所以RecyclerView将知道是否包含最后一项。RecyclerView - 通过布尔值控制项目数

的代码看起来是这样的

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

shouldShow价值得到更新,我没有打电话notifyDataSetChanged()notifyItemChanged(),但RecyclerView仍然得到正确更新。但我担心它最终会导致RecyclerView因不一致而崩溃。我的问题是,

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

回答

0

禁止实施的一个问题,直到你逝去的INT在它 2.有没有必要再调用notifydatasetchanged(我们应该叫他们时,他们是在适配器的数据变化) 3.there不会有任何一致性

+0

谢谢你的回答,但是你的意思是'传递int'吗? – katie

+0

我的意思是作为getItemCount返回诠释我们应该只传递int值你正在传递1或0基于布尔值它是正确的 –

0

1.It的确定
2.如果你想显示你的权利布尔变量发生了变化,你应该叫notifyDataSetChanged()后的最后一个项目,因为getItemCount()不会被适配器,直到回收视图滚动调用。
3.如果您不处理所有行为,该应用程序可能会崩溃。例如,您从mItemArrayonBindViewHolder()方法中获取一些项目,并且当getItemCount()返回的数字大于数组的大小时,该应用将投掷IndexOutOfBoundException。在这种情况下,您应该检查位置是否小于数组的大小。

if (position < mItemArray.size()){ 
    //you can get item from the array 
} else { 
    //handle your additional item 
} 
+0

嗨,感谢您的答案。我正在处理有关mItemArray的所有操作,它只是我担心的布尔值。 – katie