리사이클러뷰 어댑터는 어댑터를 가지고 데이터를 처리하시마시고, 외부에서 데이터를 처리한 다음 어댑터에 전달하는 방식으로 하시는게 더 유연한 방법입니다. 그래야 데이터를 컨트롤하기도 좋고 코드를 재사용하기도 좋습니다.
어댑터에 제공하는 리스트를 처리하는 메소드 또는 클래스를 만드세요. 데이터 조회, 추가, 수정, 삭제를 여기에서 처리하시면 되구요, 이 결과를 어댑터에 전달한 후 어댑터를 갱신하면 됩니다. 이렇게 하면 다른 화면에서도 코드를 공유하기가 편합니다.
간단하게 예제 코드를 보여드리면,
public class ProductRepository {
private List<Product> items = new ArrayList<>();
public List<Product> getProductList() {
return items;
}
public void addProduct(Product product) {
items.add(product);
}
public void updateProduct(Product product) {
int index = items.indexOf(product);
if (index < 0) {
throw new RuntimeException("아이템을 찾을 수 없습니다.");
}
items[index] = product;
}
public void removeProduct(Product product) {
items.remove(product);
}
public void clear() {
items.clear();
}
}
// Activity1
public class Activity1.... {
private ProductAdapter produtAdapter;
private ProdcuctRepository productRepository;
@Override
public void onCreate(...) {
super.onCreate(...);
setContentView(...);
Button addBtn = ...
addBtn.setOnClickListener(v -> addProduct());
productRepository = new ProductRepository();
produtAdapter = new ProductAdapter();
fetchProductList();
}
private void fetchProductList() {
List<Product> productList = productRepository.getProductList()
produtAdapter.setItems(productList);
}
private void addProduct() {
Product product = ...
productRepository.addProduct());
fetchProductList();
}
}
// Activity2
public class Activity2 .... {
// Same code goes here
}
아이템 중복 문제는 아이템을 추가할 때 중복체크를 먼저 하시면 됩니다.
public class ProductRepository {
...
public void addProduct(Product product) {
// 본인의 요구사항에 맞게 중복검사하는 코드 추가
if (items.contains(product)) {
// 중복처리(true/false 를 리턴하는 등의 적절한 처리)
return;
}
items.add(product);
}
...
}