我搜索了几个小时,但仍然没有解释(甚至没有在官方文件中)什么是使用RecyclerView.Adapters'的正确方法。通知的方法。已经在SO上阅读了很多类似的问题,但没有解决我的简单问题。我试着简短地举一个例子。
class MyAdapterClass extends RecyclerView.Adapter<MyAdapterClass.MyViewHolderClass> {
...
List myItemList = new ArrayList<MyItemType>();
...
}
RecyclerView myRecView = (RecyclerView) findViewById(R.id.myRecView);
myRecView.setAdapter(new MyAdapterClass(...)));
即使插入第一个项目,视图也不会刷新。
myAdapter.myItemList.add(newItem);
myAdapter.notifyItemInserted(myAdapter.myItemList.size() - 1);
如果我紧紧触摸(尝试滚动)1项目列表视图,则会显示该项目。所以它接缝是一个令人耳目一新的问题。但为什么?我有一个emtpy列表,然后我插入一个项目,然后我通知适配器有关插入。我的期望有什么不对?
顺便说一句,即使我另外打电话:
myAdapter.notifyItemChanged(myAdapter.myItemList.size() - 1);
它不会自动刷新。
编辑:当然,我不想使用notifyDataSetChanged()
:-)只在现有列表中插入,更新,删除。
答案 0 :(得分:0)
尝试在适配器类中添加此代码:
@Override
public int getItemCount() {
return myItemList.size();
}
答案 1 :(得分:0)
我希望你在列表大小的adpter getItemCount()中定义。然后使用打击代码通知适配器。
myadapter.notifyItemRangeChanged(0, userDataArrayList.size());