# ViewHolder
ArrayIndexOutOfBoundsException: length=10; index=-1a
문제발생 RecyclerView의 아이템리스트를 삭제를 하려고 했는데 getAdapterPostition의 값이 -1이여서 발생한 오류 과정 먼저 이 문제에서 가장 헷갈리게 했던 원인은 아이템뷰를 클릭했을 시에는 아이템의 위치를 알고 데이터를 가지고 오는데 삭제를 눌렀을 시에는 위치를 인식을 못해서 골치가 아팠다. 임시방편으로 getAdapterPostition가 null인 경우에는 return을 줘서 앱이 터지지는 않도록 만들어놓고 삭제를 버튼을 계속 눌렀는데 시간이 지나서 앱이 터지지 않고 데이터가 삭제 됐다. 그래서 getAdapterPostition() 를 getLayoutPosition() 로 바꿨더니 앱이 터지지 않고 삭제가 되었지만 삭제된 데이터가 View에 적용되는데 시간이 조금 걸렸다. 어쨋든 저렇게 수정했을 때 AdapterPosition을 가지고온다는 것은 Adapter가 계산되는 것이 느리다고 추론을 하였다. 그래서 찾다 보니 페

[Android / Kotlin] RecyclerView
📍 RecyclerView란? RecyclerView는 데이터 집합들을 각각의 개별 아이템 단위로 구성하여 화면에 출력해주는 뷰 그룹이다. 항목이 스크롤 되어 화면에서 벗어나더라도 뷰를 제거하지 않으며 화면에서 스크롤된 새 항목의 뷰를 재사용 한다. 앞서 포스팅 한 ListView의 단점을 보완하기 위해 만들어졌다. 📍 결과 동영상 📍 RecyclerView 구현하기 👩🏻💻 RecyclerView 생성하기 👩🏻💻 데이터 클래스 생성하기 👩🏻💻 RecyclerView 아이템 생성하기 👩🏻💻 Adapter 생성하기 >

[RecyclerView] Click Event
😄리사이클러뷰 클릭 이벤트😄 리사이클러 뷰를 만들면 아래 그림과 같이 뷰가 완성됩니다. 여기서 orer, name 에는 movie.kt(클래스 파일)에서 지정한 Text들이 들어가겠죠?? 그 코드가 onBindViewHolder()에서 아래 코드입니다. 여기서 delete button을 눌러서 아이템을 삭제하려면? 제가 원하는 기능은 delete를 눌렀을 때, MainActivity 뷰에서 해당 아이템 뷰가 사라지는 것을 원합니다. 이때는 그럼 코드를 어떻게 짜야할까요?? google, StackOverFlow,chat GPT 등에 물어보면 여러가지 방법들이 있을거예요. 그 중에서 가장 제가 이해하기 편했던 코드를 소개시켜드리겠습니다. 여기서 우리는 onBindVie

[안드로이드, JAVA] RecyclerView Databinding 체크박스 클릭
대충 코드설명 TabFragment 하단에 RecyclerView를 넣어서 DataBinding으로 데이터들을 넣어주고, RecyclerView의 왼쪽부분에 checkbox가 있는 상황. 그리고 이 전체 체크박스를 한꺼번에 클릭할 수 있는 전체클릭 버튼이 TabFragment에 위치함. 우선 RecyclerView Databinding으로 구현된 체크박스가 클릭되게 하는 부분부터 설명하고 전체 체크박스 클릭 기능은 차차 작성하도록 하겠다. 1. RecyclerView 어댑터, ViewHolder 만들기 2. Fragment.java 에서 setOnItemClickListener 구현하기.
RecyclerView
https://developer.android.com/jetpack/androidx/releases/recyclerview https://developer.android.com/guide/topics/ui/layout/recyclerview?hl=ko https://recipes4dev.tistory.com/154 https://blog.yena.io/studynote/2017/12/06/Android-Kotlin-RecyclerView1.html View, ViewGroup 별도설명 https://www.crocus.co.kr/1545 https://hungseong.tistory.com/23 RecyclerView 메모리 사용량을 최소화하면서 UI에 많은 양의 데이터 표시하는 widget item을 표시하기 위해 생성한 View를 재활용 -> ViewHolder 패턴 사용 item들이 스크롤되어 화면을 벗어나더라도, RecyclerVi
ViewHolder에 Retrofit... 넣어도 되나요
* 거두절미하고, 안됩니다.* 하지만 아무것도 모르는 나는 ViewHolder에 Retrofit을 넣을 수밖에 없었던 피치못할 사정이 있었는데.... 얼레벌레 내가 맞닥뜨린 상황 사용자가 검색한 가수와 비슷한 느낌의 가수를 추천해주는 API를 쓰고 있었다. 근데 이 API가 이미지를 제공하지 않아서 카카오 이미지 검색 API를 활용해 어울리는 가수 이미지를 찾으려 했다. 그래서 가수 정보 데이터를 활용하는 ViewHolder 안에 카카오 이미지 검색 API와 통신하는 Retrofit을 넣었다. 그러니까 정리하면, RecyclerView에 API A가 준 데이터를 넣어야 하는데, API A의 데이터에 API B가 준 데이터를 추가하고 싶지만 어떻게 데이터를 수정하고, 어디서 어떻게 어댑터를 선언하면 좋을지 모르겠어서 냅다 Retrofit을 ViewHolder에 넣었다!!!! **최대한 주어진 데이터 클래스 내에서 해결
[Android 개념] RecyclerView
RecyclerView ViewGroup의 서브클래스 (데이터에 해당하는 뷰가 포함된 ViewGroup) 각 item들은 ViewHolder 인스턴스에 포함되어 있다고 간주(view를 참조하는 ViewHolder) RecyclerView는 자신이 ViewHolder를 생성하지 않고 어댑터에 요청 Adapter 컨트롤러 객체로 RecyclerView와 RecyclerView가 보여줄 데이터 사이에 위치 어댑터가 처리하는 일 필요한 ViewHolder 인스턴스들 생성 모델 계층의 데이터를 ViewHolder들과 바인딩 RecyclerView가 처리하는 일 새로운 ViewHolder 인스턴스의 생성을 어댑터에 요청 지정된 위치의 데이터 항목에 ViewHolder를 바인딩하도록 어댑터 요청 어댑터 구현 onCreateViewHolder() : 보여줄 뷰(item) 인플레이트한 후 처리할 ViewHolder 생성하고 반환 뷰의 데이터를 채우지는 않

[Android] RecyclerView, ViewHolder 패턴, DiffUtil 클래스란?
RecyclerView 예전 안드로이드 개발 시에 리스트 형태로 데이터를 표현해주는데 사용되는 클래스는 ListView 였습니다. 하지만 데이터의 크기가 커질수록 뷰를 생성함으로써 메모리 부족 현상이 발생하게 되고 getView 메소드에서는 계속된 findViewById를 사용하였기에 비효율적이었습니다. 이를 개선한 위젯이 RecyclerView로 화면이 보여지는 뷰까지만 생성한 후 스크롤 시에 가려지게 되는 뷰들로 재사용하여 새로운 뷰들을 보여줍니다. 또한, RecyclerView는 findViewById의 값 비싼 비용을 방지하고자 ViewHolder 패턴을 강제화 시킨 ListView라고 볼 수도 있습니다. ViewHolder 패턴이란? > ViewHolder 패턴을 이해하기 위해서는 ViewHolder 패턴이 왜 필요한지부터 이해하면 좋습니다. ListAdapter의 문제점 위의 코드는 ListView의 어댑터인 Lis

[Android] ListView와 RecyclerView ViewHolder
ListView와 RecyclerView에 ViewHolder를 구현하여 적용하는 것을 살펴보고 사용 이유에 대해서도 알아보는 글을 작성하도록 하겠습니다. ViewHolder 패턴 이란? ViewHolder 패턴은 findViewById()를 계속하여 호출하는 것을 근본적으로 막기 위해 ViewHodler라는 디자인 패턴이 등장했다. ViewHolder라는 이름을 사전적으로 해석해보면 View를 받친다 or 담아준다 이러한 의미인데 쓰이는 방법 또한 그러하다. 이 전의 글인 Adapter에서 findViewById()는 ViewGroup에서 반복적인 작업을 수행하기 때문에 비용이 많이 든다고 설명했었다. ListView인든 RecyclerView에서든 ViewHolder를 사용하면 한 번 생성하여 저장했던 View는 다시 findViewById()를 통해 View를 불러올 필요가 없어진다. ListView에서의 ViewHolder ListVi
[Android] ViewHolder
RecyclerView를 사용할 때, 반드시 구현해야하는 클래스로 RecyclerView.Adapter와 RecyclerView.ViewHolder가 있습니다. RecyclerView.Adapter는 데이터를 적절히 RecyclerView에 표시하기 위해 필요한 걸 알지만, RecyclerView.ViewHolder는 왜 반드시 구현해야 하는지 의문이 들 수 있습니다. 탄생 배경 RecyclerView 이전에 목록 등을 구현하기 위해서는 ListView를 사용하였습니다. ListView도 RecyclerView와 마찬가지로 BaseAdapter 클래스를 구현하여 ListView의 adapter로 설정을 해주어야 했습니다. Kotlin으로 구현을 하게 되면 아래와 같습니다. 여기서 가장 중요한 method는 getView입니다. ListView에서 아이템을 출력할 때 getView를 이용하여 View를 생성 혹은 `

[Android] ViewHolder 패턴을 쓰는 이유
ViewHolder... 몰라 이거 쓰라던데? 안드로이드 앱 개발자라면, 거의 모든 앱에 필수적으로 들어가는 ViewGroup 을 하나 대보라고 했을 때 'RecyclerView' 이야기를 하곤 한다. 리사이클러뷰를 구현해봤으면 알다시피, Adapter 패턴을 통해 리스트 형태로 표시할 데이터와 리스트 아이템 각각의 레이아웃의 연결을 하는 것이 가장 큰 특징이다. RecyclerView.Adapter 를 상속하여 자신만의 어댑터를 만들 때 알 수 있는 것들이 여러 가지 있다. RecyclerView.ViewHolder 를 넘겨줘야 한다는 점과, onCreateViewHolder() 그리고 onBindViewHolder() 등의 추상 메소드를 반드시 구현해야 한다는 점 등이 있다. >그런데 계속해서 보이는 이 **ViewHolder, 솔직히 이게 왜 필요하고, 왜 꼭 구현해줘야 하고, 왜 RecyclerView 에는 항상 View