개발관련일지

AND ] 리사이클러뷰 코드정리 아이템클릭 - 자바 본문

개발기록/안드로이드

AND ] 리사이클러뷰 코드정리 아이템클릭 - 자바

BEECHANGBOT 2020. 4. 19. 21:05

리사이클러뷰의 아이템을 클릭하면 특성 이벤트가 실행 되도록 하기

 

이전글의 코드에 어뎁터에 아이템클릭 리스너를 추가하고 홀더에서 포지션 반환하도록하기

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.CustomViewHolder>{

    private ArrayList<Data> recyclerList;

    public MainAdapter(ArrayList<Data> recipeList) {
        this.recyclerList = recipeList;
    }

    public interface OnItemClickListener {
        //메인엑티비티에서 리사이클러뷰의 아이템을 클릭했을 시 발생하는 이벤트
        void onItemClick(View v, int position) ;
    }
    private OnItemClickListener listener ;
    // OnItemClickListener 리스너 객체 참조를 어댑터에 전달하는 메서드
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener ;
    }

    @NonNull
    @Override
    public MainAdapter.CustomViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from((parent.getContext())).inflate(R.layout.recycler_item,parent,false);
        // 리사이클러뷰의 아이템을 recycler_item로 불러준다.
        CustomViewHolder holder = new CustomViewHolder(view);
        //뷰 홀더에 아이템에 사용될 뷰를 붙여준다.
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull final MainAdapter.CustomViewHolder holder, int position) {
        // getter를 이용해서 리사이클러뷰 아이템넘버(포지션) = 어레이리스트 인덱스의 데이터를 맞춤
        holder.itemSubject.setText(recyclerList.get(position).getContent());
        holder.itemContent.setText(recyclerList.get(position).getSubject());

        holder.itemView.setTag(position);
    }

    @Override
    public int getItemCount() {
        return (null!= recyclerList ? recyclerList.size() : 0);
    }


    public class CustomViewHolder extends RecyclerView.ViewHolder {
        private TextView itemSubject;
        private TextView itemContent;

        public CustomViewHolder(@NonNull View itemView) {
            super(itemView);
            //홀더가 동작할때 사용 될 뷰 정의
            itemSubject = (TextView) itemView.findViewById(R.id.itemSubject);
            itemContent = (TextView) itemView.findViewById(R.id.itemContent);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // TODO : process click event.
                    int position = getAdapterPosition() ; //아이템 클릭햇을떄 포지션을 확인하기
                    if(listener!=null && position!= RecyclerView.NO_POSITION){
                        //포지션 값을 반환해서 클릭이벤트때 메인에서 활성화 한다
                        listener.onItemClick(v, position);
                    }
                }
            });



        }
    }
}

 

메인엑티비티의 onCreate에 해당 코드 추가

 

recipeAdapter.setOnItemClickListener(new MainAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View v, int position) {
                //TODO 여기다가 클릭시 이용할 동작을 적으면 됨 파라미터의 position 사용하기
            }
        });