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

RecyclerView item LongClick 시에 floatingButton 이랑 navigationBar 변경

0 추천

 

현재는 RecyclerView item LongClick 시에 checkBox만 노출이 되도록 되어있습니다

동시에 floatingButton 이미지 변경이랑 navigationBar에 햄버거 아이콘을 뒤로가기 아이콘으로 바꾸고 싶은데 방향성조차 감이 안오네요 ㅠㅠㅠ

따깡 (420 포인트) 님이 2021년 10월 28일 질문

1개의 답변

+1 추천
 
채택된 답변

LongClick 리스너를 어댑터나 뷰홀더 안에서 처리하지 마시고 액티비티나 프레그먼트에서 세팅해서 사용하세요. 그래야 액티비티나 프레그먼트에 있는 뷰들에 접근이 쉬워집니다.  

public class MyAdapater extends RecyclerView.Adapter<MyViewHolder> [
      interface Listener {
          void onItemLongClicked(MyItem item);
      }

     private Listener listener;

     public void setListener(Listener listener) {
         this.listener.= listener;
     }

     @Override
     public void onCreateViewHolder(ViewGroup parent, int viewType) {
          View itemView = LayoutInflater.from(parent.getContext(), R.layout.my_layout, parent, false);
          return new MyViewHolder(itemView, listener);
     }

     @Override
     public void onBindViewHolder(MyViewHolder holder, int position) {
         holder.biind(getItem(position);
    }
}

ReyclerView.Adapter adpater = ....
adapter.setListener(new MyAdapater.Listener() {
    @Override
     public void onItemLongClicked(MyItem item) {
            // floatingButton, navigationBar 설정
     }
});

 

spark (225,780 포인트) 님이 2021년 10월 28일 답변
따깡님이 2021년 10월 28일 채택됨
감사합니다ㅠㅠㅠ
해결했습니다!!!
혹시 어댑터에서 interface를 쓰는 이유가 있을까요??
Button에 View.OnClickListener를  사용하는 것과 같은 이유입니다. RecyclerView.Adapter 는 이런 인터페이스가 존재하지 않기 때문에 하나 만든거예요. 인터페이스는 말 그대로 계약서와 같은 겁니다. 인터페이스에 명시된 내용만 구현해주면 상대방과 의사소통이 가능하게 되므로, 상호간의 종속성을 줄일 수 있습니다. 만약 인터페이스를 사용하지 않고 Adapter가 액티비티나 프레그먼트에 대한 참조를 가지고 처리한다면, 어댑터에 변경이 일어날 때마다  액티비티나 프레그먼트 코드도 같이 바뀔 가능성이 많아질 겁니다. 상호간에 최소한 필요한 것만 아는 것이 종속성을 줄이는 핵심이기 때문에 인터페이스를 자주 사용하게 되는 겁니다.
오 진짜 알아듣기 쉽게 잘 설명 해주시네요
감사합니다!!
...