3주차 과제
✅ ListView 를 스크롤 했을 때 왜 switch 가 풀리는 현상이 발생하는지 원인 분석 및 해결
✅ ListView 와 RecyclerView 의 차이점 조사
✅ 구글은 왜 RecyclerView 를 밀어줄까? 어떤 장점 때문에? 어떤 차이점이 있을까?
✅ RecyclerView 를 활용하여 기존의 앱을 클론 코딩하기 (ListView로 진행하는 것도 가능) - 배달의 민족, 쿠팡이츠, 쿠팡, 야놀자 중 선택
✔️ 실습 영상
해당 레이아웃을 똑같이 구현하기
스크롤 했을 때 메인 사진이 툴바로 접히면서 글씨만 보이게 하는 부분 디테일 구현
아래의 메뉴 리스트를 RecyclerView 로 구축 - 클릭했을 때 액티비티 이동, 길게 눌렀을 때 수정 등의 기능을 입히는 방식으로 과제 진행
ListView 에 CRUD 적용, 목록 클릭했을 때 데이터를 전달하면서 액티비티 혹은 프래그먼트 화면 전환하는 부분은 반드시 구현
(Challenge) 길게 눌러서 혹은 스와이프 했을 때 수정 / 삭제 버튼 뜨게 하기
(ex.카톡 채팅방 목록에서 밀었을 때 수정 / 삭제 뜨는 부분)
필터, 검색 등 다양한 기능 활용
✔️ 레퍼런스
TedPermission - 사용자 권한 요청 및 액션을 쉽게할 수 있도록 도와주는 라이브러리
https://github.com/ParkSangGwon/TedPermission
깃허브 & 노션 포트폴리오 레퍼런스
https://velog.io/@metterian/%EB%A9%8B%EC%A7%84-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4%EB%A5%BC-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%B0%A9%EB%B2%95
SparseBooleanArray
활용SparseBooleanArray
는 정수 값들을 boolean 값들로 매핑시키는 기능을 하는 클래스이다. 정수 값은 RecyclerView 아이템의 position 으로 사용되고, boolean 값은 checked 여부로 사용된다.SparseBooleanArray
의 get()
함수를 이용해서 인자로 입력되는 position 의 상태가 checked 인지 확인할 수 있다.onCheckedChangeListener()
설정onCheckedChangeListener()
를 설정해서 switch 의 상태가 변할 때마다 position 의 아이템에 상태를 설정한다. 그리고 getView()
를 통해 뷰가 재사용될 때마다 해당 position 의 아이템의 switch 상태를 가져와 뷰에 표시하게 된다. 이 때 아래와 같이 설정해준 뒤 사용해야 한다. holder.itemsss.setOnCheckedChangeListener(null);
Android:divider
속성을 활용하여 리스트에 있는 아이템들을 구분AdapterView.OnItemClickListener
인터페이스 ⭕️RecyclerView.ItemDecoration
객체를 활용하여 Listview 보다 많은 구분선 활용 가능ListView 의 경우 리스트 항목이 갱신될 때마다 매번 아이템 뷰를 새로 구성하므로 많은 수의 데이터를 보여주게 되면 성능 저하를 야기한다. ViewHolder 패턴을 선택적으로 적용하여 성능 저하 문제를 해결할 수는 있지만, 말 그대로 선택적으로 적용할 수 있는 사항이고 다중 아이템 뷰를 사용해야 될 경우 코드가 매우 복잡해진다.
RecyclerView 는 아이템을 표시하기 위해 생성한 뷰를 재활용하며 기본적으로 ViewHolder 패턴을 사용하도록 한다. 이 말은 RecyclerView 에 단순히 ViewHolder 가 포함된 것을 넘어, 개발자가 직접 ViewHolder 패턴을 적용할 때 고민해야 했던 여러 이슈들이 RecyclerView 구현 사항에 고려되었다는 것을 의미한다. 이는 특히 RecyclerView 의 가장 큰 장점인 유연함에 대한 고려가 충분히 이루어졌다는 것을 의미한다.
유연함이란 프로그래밍에서 구현 요소 또는 구현에 따른 결과물이 쉽게 변경되거나 확장될 수 있음을 의미한다. 예를 들어 ListView 에서는 아이템들을 수직 방향으로만 나열할 수 있다. 만약 수평 방향으로 나열하려면 다른 뷰를 사용하거나 ListView 의 기능을 재구현해야 한다. 그리고 itemView 를 동적으로 구성하는 것 역시 쉽지 않다. itemView 를 완전히 새로운 형태로 바꾸려면 모든 상황에 대한 대응을 개발자가 직접 처리해야 한다. 하지만 RecyclerView 는 수직, 수평 모든 방향으로 아이템이 나열되게 만들 수 있고, itemViw 의 동적 구성을 용이하게 만들어주며, 이를 런타임에 바꾸게 만들 수도 있다.
따라서, 구글은 RecyclerView 의 유연함(Flexibility) 때문에 RecyclerView 사용을 권장한다고 할 수 있다.