관리 메뉴

웹개발자의 기지개

RecyclerView 기본 예제2 - onclick 이벤트 본문

안드로이드

RecyclerView 기본 예제2 - onclick 이벤트

http://portfolio.wonpaper.net 2019. 7. 12. 00:42

기존 RecyclerView 기본 예제1( https://wonpaper.tistory.com/113 ) 에서는 내역목록을 주욱 살펴보는 내용이었다.

이번에는 각각의 아이템을 클릭시에 동작을 하도록 하는 기능을 구현해 보고자 한다.

 

[ RecyclerAdapter ]  

기존 RecyclerAdapter 의 class ItemViewHolder 부분을 아래와 같이 수정한다.

 

< 방법1>  

ItemViewHolder 생성자에서 itemView 아이템을 바로 onClick 처리한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
    // RecyclerView 의 ViewHolder 만든다.
    class ItemViewHolder extends RecyclerView.ViewHolder {
 
        private TextView textView1;
        private TextView textView2;
        private ImageView imageView1;
 
        ItemViewHolder(@NonNull View itemView) {
            super(itemView);
 
            textView1 = itemView.findViewById(R.id.textView1);
            textView2 = itemView.findViewById(R.id.textView2);
            imageView1 = itemView.findViewById(R.id.imageView1);
            
            // 하나의 아이템 전체인 itemView를 클릭했을때
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(v.getContext(),textView1.getText() + " / " + textView2.getText(),Toast.LENGTH_SHORT).show();
                }
            });
 
        }
 
        // 실제 데이터들을 1:1 대응하여 각각의 내부뷰에 바인딩시킨다.
        void onBind(Data data) {
            textView1.setText(data.getTitle());
            textView2.setText(data.getContent());
            imageView1.setImageResource(data.getResId());
 
        }
    }
cs

 

< 방법2>

ItemHolder 클래스에서 OnClickListener를 implements 해서 할 수도 있는데,

한 아이템 안의 각 항목들별로 세분화 하여 각각 클릭했을때 onclick 동작을 구현해 볼수도 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    // RecyclerView 의 ViewHolder 만든다.
    class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
 
        private TextView textView1;
        private TextView textView2;
        private ImageView imageView1;
        private Data data;  // Data 객체를 지정한다. 밑에 onClick 함수에서 내용을 
 
        ItemViewHolder(@NonNull View itemView) {
            super(itemView);
 
            textView1 = itemView.findViewById(R.id.textView1);
            textView2 = itemView.findViewById(R.id.textView2);
            imageView1 = itemView.findViewById(R.id.imageView1);
 
            itemView.setOnClickListener(this);
            textView1.setOnClickListener(this);
            textView2.setOnClickListener(this);
            imageView1.setOnClickListener(this);
 
        }
 
        // 실제 데이터들을 1:1 대응하여 각각의 내부뷰에 바인딩시킨다.
        void onBind(Data data) {
            this.data = data;
 
            textView1.setText(data.getTitle());
            textView2.setText(data.getContent());
            imageView1.setImageResource(data.getResId());
 
        }
 
        @Override
        public void onClick(View v) {
 
            switch (v.getId()) {
                case R.id.linearItem :
                    Toast.makeText(v.getContext(), "TITLE : " + data.getTitle() + "\nContent : " + data.getContent(), Toast.LENGTH_SHORT).show();
                    break;
 
                case R.id.textView1:
                    Toast.makeText(v.getContext(), data.getTitle(), Toast.LENGTH_SHORT).show();
                    break;
                case R.id.textView2:
                    Toast.makeText(v.getContext(), data.getContent(), Toast.LENGTH_SHORT).show();
                    break;
                case R.id.imageView1:
                    Toast.makeText(v.getContext(), data.getTitle() + " 이미지 입니다.", Toast.LENGTH_SHORT).show();
                    break;
 
            }
        }
    }
cs

기존 RecyclerView 기본 예제1( https://wonpaper.tistory.com/113 )에서  item.xml 안의 큰테두리인 LinearLayout의 id값을 linearItem 로 부여했다.

 
Comments