APP/개발

07. boostcourse_ android app_ java_recyclerview

풍요 평화 만땅 연구원 2022. 6. 23. 14:29

RecyclerView

- 리싸이클러뷰는 리스트뷰처럼 상하 스크롤이 가능하게 만들 수도 있고 좌우 스크롤이 가능하게 만들 수도 있음

- 그리고 각각의 아이템이 화면에 보이는 과정에서 메모리를 덜 사용하도록 뷰홀더(ViewHolder)를 이용해 캐시 메커니즘이 구현되어있음

 

*방법

1. recyclerview dependency 없을때 추가

2. activity_main.xml 파일에 recyclerview 껍데기만들기 -> 어뎁터 사용해야함

3. itme 레이아웃 파일 만들기

4. 위 레이아웃에 들어갈 데이타 파일 만들기 -> with java

-> 오른쪽 클릭 > generate > Constructor(생성자 / 객체 초기화) / getter and setter

*constructor

*getter and setter 

- 객체 지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호함

- 데이터는 외부에서 접근하지 않도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터에 접근하도록 유도함

- 이런역할하는게 Setter!

 

5. adapter파일 생성 -> java에서

  a.  그리고 생성한 어뎁터 파일 안에서 viewholder지정

  b. data관련 저장

  c. generate >> implecation 

  d. 생성자 작성 -> data의 item만 보관 -> viewholder처음 만들어지는 시점에 작동 

  e. onCreateViewholder 수정(레이아웃호출, 각각 item parent에 호출)

  f. onCreate View holder 수정(레이아웃호출, 각각 item parent에 호출) / get Item count /add item, get item등 관련 입력

 

** 수정사항

- 이미지는 int / getter and setter -> R.drawable.파일 이름

itemdata.java
movieadapter.java
Main activity.java

- movie adapter에 하나더 수정 : setItem에서 -> setImageResorce(item.getImage()) -> setimageresource으로 해줘야함

* ViewHolder란?

- 각 뷰를 보관하는 Holder 객체

- ListView / RecyclerView 는 inflate를 최소화 하기 위해서 뷰를 재활용 하는데, 이 때 각 뷰의 내용을 업데이트 하기 위해 findViewById 를 매번 호출 해야함

- 이로 인해 성능저하가 일어남에 따라 ItemView의 각 요소를 바로 엑세스 할 수 있도록 저장해두고 사용하기 위한 객체

* RecyclerView의 경우는 Recycler.Adapter를 상속 받을 때 ViewHolder Type을 지정해야 함
   ListView에서는 ViewHolder 를 구현하지 않아도 되지만, RecyclerView는 구현을 강제하고 있음

-> Recycler.Adapter를 상속하면, 몇 개의 메소드를 오버라이딩 해야함

-> 그 중  ViewHolder와 관련성이 높은 메소드는 onCreateViewHolder(), onBindViewHolder()

-> ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 호출 되면서 새로운 View 를 생성할 때 실행되어 ViewHolder를 리턴

-> 그리고, void onBindViewHolder(ViewHolder holder, int position) 에서 ViewHolder의 내용을 변경

 

 

RecyclerView event처리

 

 

1. OnItemClickListener정의(movieadapter.java파일에)

2. setmethod입력

3. Viewholder에 입력

- listener 호출이안되서 밑에다 다시 입력

- binding에 listener 추가

- 다시 MainActivity.java파일 수정