07. boostcourse_ android app_ java_recyclerview
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.파일 이름
- 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파일 수정