반응형
리사이클러뷰(RecyclerView) 아이템 클릭 이벤트 처리하기
리사이클러뷰는 리스트뷰와는 다르게 직접 클릭 이벤트를 설정해 줘야하는데
아주 간단하게 처리가 가능하다.
그전에 일단 리사이클러뷰 가 기본적으로 구현이 되어있어야하므로
https://mine-it-record.tistory.com/253 를 참고하여 만들어보자
앞서 리사이클러뷰를 만들때 생성한 Adapter 내에 아이템 클릭 이벤트 리스너를 만들어 사용하는 방법이다.
이런식으로 Adapter 안에 클릭 이벤트 관련한 것들은 선언해주자
public class BldgListAdapter extends RecyclerView.Adapter<BldgListAdapter.ItemViewHolder> {
...
private OnItemClickListener mListener = null ;
public interface OnItemClickListener {
void onItemClick(View v, int position) ;
}
// OnItemClickListener 리스너 객체 참조를 어댑터에 전달하는 메서드
public void setOnItemClickListener(OnItemClickListener listener) {
this.mListener = listener ;
}
...
이제 어댑터 내부에 있던 ViewHolder 내에 onClick을 선언해 주면 된다.
getAdapterPosition() 을 사용하면 클릭한 해당 아이템의 위치를 가져올 수 있으므로
원하는 방식으로 사용하면 된다.
class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView txtValue;
ItemViewHolder(View itemView) {
super(itemView);
txtValue = itemView.findViewById(R.id.txtValue);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
if(mListener !=null){
mListener.onItemClick(v,position);
}
}
}
});
}
void onBind(BldgSelectListItemVO listItem) {
txtValue.setId(listItem.getId());
txtValue.setText(listItem.getValue());
txtValue.setTag(listItem.getTag());
}
}
이제 해당 어댑터를 실행해주는 부분에서 ItemClickListener를 실행해서
클릭 이벤트를 주어 사용하면 된다.
그리고 나서 setAdapter 로 리사이클러뷰에 삽입하면
클릭이벤트가 잘 실행될 것이다.
BldgListAdapter adapter = new BldgListAdapter();
adapter.setOnItemClickListener(new BldgListAdapter.OnItemClickListener() {
@Override
public void onItemClick(View v, int position) {
// 클릭했을때 원하는데로 처리해주는 부분
}
});
lvSelectList.setAdapter(adapter);
아주 극찬할 정도로 정리가 잘되어있는 블로그가 있어 소개한다. 출처이기도 하고
출처 : https://recipes4dev.tistory.com/168?category=790402
반응형
댓글