마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

리사이클러뷰 클릭이벤트 저장

0 추천
https://www.masterqna.com/android/102954/%EB%A6%AC%EC%82%AC%EC%9D%B4%ED%81%B4%EB%9F%AC%EB%B7%B0-list-add-%EC%A7%88%EB%AC%B8

여기서 추가 질문드립니다.

링크까지 연결했는데 버튼에 getDrawableId로 한것을 클릭시 체크 언체크 여부를 추가된 각 item에 대해서 어떤 변수에 저장하려고하는데

구현방법을 모르겠습니다!
enerigpy (2,110 포인트) 님이 2023년 3월 14일 질문

1개의 답변

0 추천

리사이클러뷰를 다루기시기 전에 아래 문제를 먼저 풀어 보세요.

public class ItemData {
     private int image;  
     private boolean checked1;
     private boolean checked2;
     private String link;

     public ItemData(int image, String link) {
         this.image = image;
         this.link = link;
     }

     // gettters

}

위의 POJO 클래스를  관리하는 인터페이스를 구현해 보세요.

public interface ItemDataRepository {
   
      public List<ItemData> getList();

      public ItemData getById(String id);

      public void update(ItemData item);

      public void deleteById(String id);
}

public class ItemDataRepositoryImpl implements ItemDataRepository {

  // 메소드들 오버라이드
}

 

위의 기능을 쉽게 구현하실 수 있다면, 그 다음에 리사이클러뷰로 넘어가세요. 어댑터는 단순히 위의 ItemDataRepository 에서 데이터를 가져와서 사용하면 됩니다.

// Activity

private ItemDataRepository itemDataRepository;


@Override
public void onCreate(...) {
     super.onCreate(...);

     ...

     itemDataRepository = new ItemDataRepositoryImpl();

}

 

spark (225,780 포인트) 님이 2023년 3월 14일 답변
spark님이 2023년 3월 14일 수정
POJO 클래스가 뭔가요?!
Plain Old Java Objects. 별다른 기능없이 단순히 데이터를 보관하는 역할만 하는 클래스로 볼 수 있습니다.
자바가 주력언어가 아니어서 접근이 어려운데

public class ItemDataRepositoryImpl implements ItemDataRepository {
..
}

이 부분 힌트 얻을수 있을까요?
아래처럼 읽으시면 됩니다.
public으로 접근이 가능한 class인 ItemDataRepositoryImpl는 ItemDataRepository (인터페이스를) 구현한다. Java의 interface 는 어떻게 동작을 하는지 요약해서 보여주는 틀과 같구요, 구현을 해서 사용을 하셔야 합니다.
자바가 익숙하지 않아서 자주 어려움을 겪으신다면, 자바를 한두주 정도는 집중적으로 먼저 공부하시기를 권장합니다. 언어 자체가 익숙치 않으시면, 안드로이드 SDK를 사용하시는데 많이 방해가 됩니다.
https://thepassion.tistory.com/300 여기 보시면 액티비티에 implements ItemDataRepository 하는거 같은데 맞을까요?
아니오. 액티비티는 뷰이고 ItemDataRepository는 ItemData를 관리하는 클래스이기 때문에 둘은 완전히 역할이 다릅니다. 위에서 보여드린 코드처럼 ItemDataRepositoryImpl 와 같이 해당 인터페이스를 구현한 후 이걸 액티비티에서 가져다 사용하시면 됩니다. 그래야 재사용도 쉽고 코드를 수정하기도 쉽습니다.
그럼 item 클래스에서 정의하면 되는건가요?

public interface ItemDataRepository

public class ItemDataRepositoryImpl implements ItemDataRepository
ItemRepository.java 파일에 ItemDataRepository 인터페이스 정의하시고 ItemDataRepositoryImpl.java 파일에 ItemDataRepositoryImpl 클래스를 만들어서 ItemDataRepository를 구현하세요. ItemDataRepository의 메소들을 오버라이드 하시면 됩니다. 자바공부를 최소한의 기초라도 하시면 좋을 것 같아요.
근데 pojo로 구현하는 방법말고
holder.itemView.setOnClickListener 에서
getAdapterPosition으로 db에 넣는 방법이 있을수 있다고 하는데 맞을까요?
제가 POJO를 말씀드린건 해당 기능을 구현할 때 로직이 어떻게 흘러가야하는지 감을 잡으시라고 했던 거구요. 제가 말씀드린 부분을 풀기 힘드시면 말씀하신 방법으로 되긴 합니다만, 마찬가지로 어려움이 있으실겁니다.
gpt한테 도움얻으려하는데 키워드 힌트 얻을수 있을까요?
ChatGPT에 한글로 질문을 하셔도 잘 알아듣습니다.여기서 하셨던 질문을 그대로 해보세요.
...