gpt4 book ai didi

android - 使用缓存策略 "CACHE_THEN_NETWORK"在 ListView 中添加重复行

转载 作者:行者123 更新时间:2023-11-29 20:14:06 25 4
gpt4 key购买 nike

我正在使用解析查询来获取一些数据并将其显示在 ListView 中。我正在使用缓存策略 ParseQuery.CachePolicy.CACHE_THEN_NETWORK,它首先从缓存中获取数据,然后在 ListView 中显示它,然后从网络中获取数据并在 ListView 中显示更新的数据。

问题是,当从网络获取数据时(从缓存中获取之后),重复的行会添加到我的 listView 中。我不能简单地清除适配器中的列表,因为我在 listView 中使用分页。

我的问题是,从缓存或网络中获取数据时是否会触发任何回调?还是有其他方法可以解决所描述的问题?

最佳答案

当您将项目添加到您的列表时,删除已经存在的项目。

public void addItem(YourItem item){
for(YourItem item2 : yourItemsList){
if(item.getObjectId().equals(item2.getObjectId()){
yourItemsList.remove(item2);
break;
}
}
yourItemsList.add(item);
yourAdapter.notifyDataSetChanged();
}

更好的是,如果您是 ParseObject 的子类,您可以在您的类中覆盖 equals():

@ParseClassName("YourItem")
public class YourItem extends ParseObject {
/* All your accessors */

@Override
public boolean equals(Object o) {
return o != null
&& o instanceof YourItem
&& ((YourItem) o).getObjectId().equals(getObjectId());
}
}

然后,您可以将 addItem 方法更改为:

public void addItem(YourItem item){
yourItems.remove(item); //this will remove the object with matching ID if it exits.
yourItems.add(item);
yourAdapter.notifyDataSetChanged();
}

关于android - 使用缓存策略 "CACHE_THEN_NETWORK"在 ListView 中添加重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34306192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com