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

recyclerview의 item 중 버튼 클릭시 listener가 각각 다르면 그냥 하드코딩이 나을까요?

0 추천
recyclerview의 아이템 구성이 텍스트뷰랑 버튼 두가지 라고 가정하면

텍스트는 그냥 array 리소스를 사용하면 된다쳐도

버튼클릭 리스너가 일부는 같은걸 사용하고 나머지는 각각 다른 리스너를 사용해야 한다면

차라리 하드코딩이 나은걸까요?아니면 그냥 viewholder에서 position마다 버튼리스너를 주는게 맞는걸까요?
빈길 (1,270 포인트) 님이 2020년 10월 30일 질문

1개의 답변

0 추천
 
채택된 답변

리스너의 할당은 외부에서 넘겨주셔서 뷰홀더에서 바인딩하시면 될 것 같습니다. 아래와 같은 방식으로.

MyAdapter adapter = new MyAdapter();
adapter.setItemOnClickListener(...)
adapter.setAnotherItemOnClickListner(...)


class MyAdapter extends RecyclerView.Adapter {

   private View.OnClickListener itemOnClickListener;
   private View.OnClickListener anotherItemOnClickListner;

    public void setItemOnClickListener(View.OnClickListener listener) {
         this.itemOnClickListener = listener;
    }

     public void setAnotherItemOnClickListner(View.OnClickListener listener) {
         this.anotherItemOnClickListner = listener;
    }

   public void onBindViewHolder(ViewHolder vh, int position ) {
        vh.setItemOnClickListener(this.itemOnClickListener);
        vh.setAnotherItemOnClickListner(this.anotherItemOnClickListner);
   }
}
spark (227,530 포인트) 님이 2020년 10월 30일 답변
빈길님이 2020년 11월 2일 채택됨
해당 동작이 어느 클래스의 책임인지 잘 생각해 보시고, 책임을 져야하는 클래스에 해당 코드가 있으면 됩니다. 리스너의 구체적인 동작은 뷰홀더의 책임아니니  뷰홀더는 그냥 리스너만 할당해 주는 것입니다.
한번 해보겠습니다. 답변 감사합니다!
...