final FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter(Service.class, R.layout.browse_service_detail, ServiceHolder.class, mReference){
@Override
protected void populateViewHolder(ServiceHolder serviceHolder, Service service, int position) {
serviceHolder.setServiceName(service.getName());
serviceHolder.setInfo("От " + service.getPrice1());
service.setQuantitySelected(service.getQuantityEnabled());
if (Order.getInstance().getServices() != null) {
for (Service serviceFromSingleton : Order.getInstance().getServices()) {
if (serviceFromSingleton.getName() == serviceHolder.getServiceName().getText().toString()) {
serviceHolder.getServiceName().setSelected(true);
serviceHolder.getServiceName().setTextColor(getResources().getColor(R.color.yellow));
}
}
}
//add item to array
servicesList.add(service);
}
}
};
当我运行此活动时,它会将可见列表对象记录到数组中,但是当我向下滚动并向上返回时,它会再次将第一个元素复制到数组中。怎么解决?对于仅添加一次的项目。
答案 0 :(得分:2)
我认为RecyclerAdapter中没有任何问题。我认为该列表只会多次插入相同的数据。 为什么不在向其中添加数据之前检查列表是否为空,如果数据不为空则清除数据然后添加新数据。
if(servicesList.isEmpty())
servicesList.add(service);
//else clear and add data
else{
servicesList.clear();
servicesList.add(service);
}
要处理数据重复,您可以使用Set
来忽略滚动时的重复插入。
servicesList.add(service);
Set<Service> mSet= new HashSet<Service>();
mSet.addAll(servicesList);
servicesList.clear();
servicesList.addAll(mSet);
或使用Set
以外的ArrayList
有点笨拙,但会为你效劳。