Android RecyclerView.Adapter notifyItem让我抓狂

时间:2018-03-13 11:10:03

标签: android android-recyclerview adapter

我搜索了几个小时,但仍然没有解释(甚至没有在官方文件中)什么是使用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() :-)只在现有列表中插入,更新,删除。

2 个答案:

答案 0 :(得分:0)

尝试在适配器类中添加此代码:

@Override
    public int getItemCount() {
        return myItemList.size();
    }

答案 1 :(得分:0)

我希望你在列表大小的adpter getItemCount()中定义。然后使用打击代码通知适配器。

            myadapter.notifyItemRangeChanged(0, userDataArrayList.size());