Adpater안에 아이템을 클릭했을 때 반응할 수 있는 Listener 를 위치시키세요.
plubic interface AdapterItemListener<T> {
void onItemClicked(T item);
}
public class MyAdapter extednds RecyclerView.Adapter<RecyvlerView.ViewHolder> {
@Nullable
private AdapterItemListener<ItemType> listener;
public void setListener(AdapterItemListener<ItemType> listener) {
this.listener = listener
}
}
RecyclerView.Adapter 의 onCreateViewHolder나 onBindViewHolder에 listener 을 연결하세요.
@Override
public abstract MyViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
View itemView = LayoutInflator.from(parent.context).inflater(layoutId, parent, false);
return new MyViewHolder(itemView, this.listener);
}
@Override
public abstract void onBindViewHolder (MyViewHolder holder, int position) {
holder.bindItem(getitem(position));
}
ViewHolder에서 listener를 설정해 주세요.
public class MyViewHolder extends RecyclerView.ViewHolder {
private final AdapterItemListener<T> listener;
public MyViewHolder(View itemView, AdapterItemListener<T> listener) {
this.listener = listener;
}
public void bindItem(MyItem item) {
this.itemView.setOnClickListener(v -> [
listener.onItemClicked(item);
});
}
}
뷰쪽에서 Adapter에 있는 listener에 필요한 액션을 집어넣어 주시면 됩니다.
public class MyActivity extends AppCompatActivty {
private MyAdapter adapter;
@Override
public void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
// RecylcerView 설정 코드 생략
adapter = new MyAdpater();
adapter.setListener(item -> {
// 아이템 클릭시 동작
// 아이템을 체크하여 원하는 액티비티로 이동.
});
}
}
각자의 스타일에 따라 adapter의 bindViewHolder안에서 직접 클릭이벤트를 처리할 수도 있고, ViewHolder 안에서 getBindingAdapterPosition 을 호출해서 눌린 아이템인 어떤 것인지 처리할 수도 있긴 합니다만, 전체적인 골격은 같습니다.
사용하시는 코드에 대해서는 전혀 언급이 없기 때문에 아이템 클릭시의 구체적인 처리는 제가 말씀드릴 수가 없고, 님이 사용하시는 코드를 기반으로 작성하시면 될 듯합니다.