我对RecyclerView不太熟悉。我的需求如下:
- 我需要调用一个Web服务,该服务将提供两个数组。一个是我需要在列表中显示的数据。为此,我正在使用RecyclerView
。另一个数组是状态,我将其显示在下拉菜单中。这个Web服务是分页的。我已经添加了分页,并且它正常工作。
- 当用户从下拉菜单中选择其他元素时,我必须再次调用Web服务,并且RecyclerView数据应更改。
目前,在分页的情况下,我执行以下操作,一旦我从连续的页面获取更多数据:
mAccountListingsAdapter.notifyItemRangeInserted(mAccountListingsAdapter.getItemCount(), mListings.size() - 1);
当我从下拉菜单中更改数据时,我正在执行以下操作:
mListings.clear();//Clear the data set
mAccountListingsAdapter.notifyDataSetChanged();//Call notify data set changed on recycler view adapter
getAccountListings();//Fetch new data from the web service and display in recycler view
然而,建议不要直接在recycler view adapter上调用notifyDataSetChanged()方法,而是应该调用特定的notifyXXX方法,以避免性能和动画问题。
因此,我有疑虑,是否正确在下拉列表的onItemSelected()方法中通知recycler view adapter,或者应该进行更改。
附注:我尝试在onItemSelected()方法中执行以下操作:
int size = mListings.size();
mListings.clear();
mAccountListingsAdapter.notifyItemRangeRemoved(0, size - 1);
但是它崩溃了,并出现以下异常:
03-02 12:59:41.046: E/AndroidRuntime(4270): java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 4(offset:0).state:5