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

자바에서 인터페이스 변수화라는게 존재하나요?

0 추천

안녕하세요. 안드로이드 공부중 궁금한게 있어서 질문 올립니다.

아래 코드에 보면 private recyclerViewClickListener mListener라는 부분이 있는데

이부분은 recyclerViewClickListener 인터페이스를 변수화 시킨것이라고 보면 되는것인가요?

그리고 이 부분을 넣어주는 이유는 무엇인가요?

public class recyclerAdpater extends RecyclerView.Adapter<recyclerAdpater.ViewHolder> {

    private final List<Item> mDataList;

    public interface recyclerViewClickListener {
        void onItemClicked(int position);
        void onShareButtonClicked(int position);
        void onLearnMoreButtonClicked(int position);
    }//인터페이스 메소드 선언

    private recyclerViewClickListener mListener;

    public void setOnClickedListener(recyclerViewClickListener listener) {
        mListener = listener;
    }

    public recyclerAdpater(List<Item> datalist) { //생성자
        mDataList = datalist;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Item item = mDataList.get(position);
        holder.title.setText(item.getTitle());
        holder.contents.setText(item.getContents());

        if (mListener != null) {
            final int pos = position;
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onItemClicked(pos);
                }
            });
            holder.share.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onShareButtonClicked(pos);
                }
            });
            holder.more.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.onLearnMoreButtonClicked(pos);
                }
            });
        }

    }

    @Override
    public int getItemCount() {
        return mDataList.size();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {

        TextView title;
        TextView contents;
        Button share;
        Button more;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.titleText);
            contents = itemView.findViewById(R.id.contentText);
            share = itemView.findViewById(R.id.shareButton);
            more = itemView.findViewById(R.id.seeButton);
        }
    }
}

 

존크레쉬 (160 포인트) 님이 2019년 9월 29일 질문

1개의 답변

0 추천
RecyclerView는 ListView와 달리 item click에 대한 리스너를 바로 달 수가 없어서 어댑터 안에서 처리해줘야 합니다.

저렇게 하면 외부에서 item click을 받을 수 있어요.

그 용도를 위해 저렇게 변수로 선언하고, 외부에서 setOnClickedListener()를 호출해서 리스너를 넣어주는거죠.

 

저 클래스 호출하는 코드를 보시면 이해하기 쉬울 겁니다.
쎄미 (162,410 포인트) 님이 2019년 9월 30일 답변
마지막줄에 저 클래스라는건 recyclerAdapter를 말씀하시는거?죠 혹시 recyclerviewclicklistener 인터페이스를 말씀하시는건 아닌가해서요
setOnClickedListener() 를 호출하는 코드요.
...