Firebase recyclerAdapter将对象复制到arrayList中

时间:2017-04-04 09:48:30

标签: android

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);


        }
    }
};

当我运行此活动时,它会将可见列表对象记录到数组中,但是当我向下滚动并向上返回时,它会再次将第一个元素复制到数组中。怎么解决?对于仅添加一次的项目。

1 个答案:

答案 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

有点笨拙,但会为你效劳。