我有一个recyclerview,它显示了我的sqlite数据库中的数据。用户可以选择删除单个项目或删除所有项目,这意味着从sqlite db中删除该项目,然后从recyclerview中删除该项目。删除单个项目效果很好。
清除所有内容均无法正常工作。这些项目已从表中删除,但recyclerview仍显示这些项目,我什至仍然可以单击它们。重新启动活动时,recyclerview为空。
public void updateDataSet(){
db = new DBHandler(context);
db.deleteUserBasket(username);
ItemList = db.getAllItems(userName);
notifyDataSetChanged();
}
这是我要求清除所有内容的原始方法,它确实起作用,但现在它没有从recyclerView中删除项目。
我也尝试过
public void deleteDataSet(){
db = new DBHandler(context);
ItemList = db.getAllUserCartItems(userName);
int size = cartItemList.size();
db.deleteUserBasket(userName);
notifyItemRangeRemoved(0,size);
}
这两个方法都被调用,我已经逐步介绍了它们,但是似乎notify方法没有做任何事情。
db.deleteUserBasket(userName);
cartItemList = db.getAllUserCartItems(userName);
basketOrderAdapter = new BasketOrderAdapter(getApplicationContext(),cartItemList,userName);
basketOrderAdapter.notifyDataSetChanged();
这是我尝试过的其他方法,此时cartItemList为空,调试显示size = 0;
这也一样,项目仍在我看来
答案 0 :(得分:1)
一种实现方法是使用刷新的数据创建新适配器,并将其设置为RecyclerView。然后需要notifyDataSetChanged()。
更好的方法是在您的适配器中添加setter方法,在其中设置新列表。之后,您应该调用notifyDataSetChanged()
答案 1 :(得分:0)
似乎您没有从RecyclerView的适配器列表中删除项目。
ItemList cartItemList= db.getAllUserCartItems(userName);
从数据库返回一个新的更新列表,但这不是您用于适配器的列表。
创建一种在适配器内部设置数据的方法。当您要更新列表时,请勿创建新适配器。
public void setAdapterList(List<Object> newData) {
this.data = data;
// or clear and add new data your adapter data
this.data.clear();
this.data.addAll(newData);
// You can also check out DiffUtil library to only change necessary part of your adapter
// Change adapter as you like with notify methods
notifyDataSetChanged();
}