728x90

전체 글 62

[Android] RecyclerView와 ListAdapter

이전에 DiffUtil과 AsyncListDiffer에 대해 포스팅하였다. ListAdpater는 이 두개를 기반으로 이루어져 있다. https://ehdnsdlek.tistory.com/20 [Android] RecyclerView의 DiffUtil 알아보기 RecyclerView를 업데이트 하기 위해 초기에는 notifyDataSetChanged()를 호출하여 전체 목록을 업데이트 했지만 이러한 방법은 전체 목록을 재생성하기 때문에 매우 비효율적이다. 이러한 문제를 해결하 ehdnsdlek.tistory.com https://ehdnsdlek.tistory.com/21 [Android] RecyclerView의 AsyncListDiffer 알아보기 DiffUtil에 대한 정보는 이전에 포스팅 하였다...

Android 2024.03.08

[Android] RecyclerView의 AsyncListDiffer 알아보기

DiffUtil에 대한 정보는 이전에 포스팅 하였다. https://ehdnsdlek.tistory.com/20 [Android] RecyclerView의 DiffUtil 알아보기 RecyclerView를 업데이트 하기 위해 초기에는 notifyDataSetChanged()를 호출하여 전체 목록을 업데이트 했지만 이러한 방법은 전체 목록을 재생성하기 때문에 매우 비효율적이다. 이러한 문제를 해결하 ehdnsdlek.tistory.com 오늘은 AsyncListDiffer에 대해 알아보자 AsyncListDiffer DiffUtil은 메인 스레드에서 작업이 수행되는 경우 성능이 매우 저하된다고 했다. AsyncListDiffer는 DiffUtil의 계산을 백그라운드 스레드에서 수행하여 이러한 문제를 해결하..

Android 2024.03.07

[Android] RecyclerView의 DiffUtil 알아보기

RecyclerView를 업데이트 하기 위해 초기에는 notifyDataSetChanged()를 호출하여 전체 목록을 업데이트 했지만 이러한 방법은 전체 목록을 재생성하기 때문에 매우 비효율적이다. 이러한 문제를 해결하기 위해 등장한 DiffUtil은 데이터 세트 간의 차이점을 계산하여 필요한 최소한의 업데이트만을 수행함으로써 성능을 개선하는 것이 목적이다. 즉, 두 목록간의 차이점을 찾고 업데이트 되어야 할 목록들을 반환하고RecyclerView 어댑터에 대한 업데이트를 알리는데 사용된다. DiffUtil을 사용해야 하는 상황에 대한 예시 블로그를 작성하는 과정에서 사용자가 새로고침을 하여 블로그 게시글이 업데이트 되었다고 가정해보자 초기 데이터 세트 Post A Post B Post c 변경된 데이터..

Android 2024.03.06

백준 2630번 : 색종이 만들기 / C++

문제 링크 : https://www.acmicpc.net/problem/2630 전체 종이의 크기가 N x N (N= 2^7, k는 1 이상 7 이하의 자연수)이며 종이를 가로 세로 중간 부분을 잘라서 똑같은 크기의 네 개의 N/2 x N/2 색종이로 나눈다. 색종이는 하나의 색으로만 이루어져 있으므로, 하얀색 또는 파랑색으로만 이루어져 있다면 더 이상 탐색은 필요하지 않다. 하지만 탐색을 진행하면서 다른 색이 나오면 탐색을 중지하고, "현재 사각형의 변의 길이 / 2"로 잘라서 탐색을 다시 진행한다. 색종이가 좌표 위의 원점에 있다고 가정하고, 한 변의 길이는 N, 시작 좌표는 x, y로 설정한다. => [ X 좌표 , Y 좌표, 현재 사각형의 한 변의 길이 ] 색종이를 자를때 마다 4개의 사각형이 나..

알고리즘 2024.03.05

[Android] absoluteAdapterPosition 와 getBindingAdapterPosition 차이점

getBindingAdapterPosition()과 absoluteAdapterPosition 사이에는 기능적으로 비슷하면서도 가져오는 위치의 종류(상대적 위치 vs 절대적 위치)에서 차이를 보인다. 결과족으로는 RecyclerView.ViewHolder에서 현재 아이템의 위치를 반환하는 역할을 하지만 언어와 문맥에 따라 결과값이 달라질 수 있다. 특히 이러한 차이점은 ConcatAdapter와 같이 여러 개의 어댑터가 결합된 RecyclerView에서 중요해진다. getBindingAdapterPosition() : 상대적 위치 반환 - ViewHolder가 바인딩된 어댑터 내에서의 상대적인 위치를 반환한다. - ConcatAdapter를 사용하는 경우, ViewHolder가 속한 개별 어댑터 내에서의..

Android 2024.03.04

[Android] ViewHolder의 위치 참조 - getAdapterPosition / getBindingAdapterPosition

RecyclerView를 학습하면서 리스트의 아이템 항목 선택 시, 해당 아이템의 인덱스를 가져오는 과정에서 학습한 내용이다 RecyclerView의 아이템 항목을 선택하고, 하나만 선택될 수 있도록 새로 선택한 항목이 기존의 항목인지 비교하는 로직을 작성했다. 1. ViewHolder의 위치 참조 - int position @Override public void onBindViewHolder(@NonNull RvAdapter.MyViewHolder holder, int position) { holder.itemView.setOnClickListener(v -> { // 현재 아이템의 위치 조회 int currentPosition = position; }); } 처음에는 ViewHolder의 위치를 po..

Android 2024.03.03

[Android] Fragment 생성 방법 정리 / newInstance()

이 글에서는 프래그먼트의 효율적인 생성 방법에 대해 이야기해보겠습니다. 1. 직접 생성자 호출 MyFragment fragment = new MyFragment(); Fragment의 인스턴스를 직접 생성하기 위해 기본 생성자를 호출한다. 가장 기본적이고 간단한 방법이지만, 안드로이드 시스템이 Fragment를 재생성할 때 모든 데이터를 잃어버린다. 2. newInstance() : 정적 팩토리 메소드 public static MyFragment newInstance(String param1) { MyFragment fragment = new MyFragment(); // Fragment 인스턴스 생성 Bundle args = new Bundle(); args.putString("param1", para..

Android 2024.03.02

[Android] RecyclerView - ViewHolder의 재사용과 상태 관리의 중요성 (선택 이벤트 처리)

리스트 항목을 선택하고 스크롤 했더니 선택된 항목이 사라졌어요 문제 분석 RecyclerView는 Android 앱 개발에서 리스트 같은 형태로 아이템을 표시하기 위해 널리 사용되는 컴포넌트이다. RecyclerView를 사용해서 아이템 선택 시, 색상이 바뀌도록 목록을 구현하고 있었는데 리스트 목록을 아래로 내리니 선택했던 아이템이 사라지는 현상이 발생했다. 즉, 기본적으로 RecyclerView는 화면에 보이지 않는 뷰 홀더를 폐기하고, 다시 뷰에 데이터를 바인딩해서 재사용하기 때문에 기존에 선택했던 아이템이 사라지는 것이었다...! 게다가 선택된 상태로 아래에 다시 등장하는 아이템을 보고, 문제를 해결하기 위해 변경 사항을 추적하기로 했다. @Override public void onBindView..

Android 2024.03.01

[Android] RecyclerView 메소드에서의 payload

payload payload란 아이템의 변경 사항에 대한 부분 업데이트를 위해 사용되는 객체이다. 즉, 어댑터의 onBindViewHolder()가 호출될 때 넘겨 받는 파라미터이다. payload의 목적은 RecyclerView 내의 아이템 변경 시 전체 아이템 뷰를 재바인딩 하지 않으며, 변경된 부분만 업데이트 하는 것에 있다. onBindViewHolder(ViewHolder holder, int position, List payloads) payloads는 List 타입의 파라미터로 변경 사항에 대한 정보를 담고 있는 객체의 집합이다. payload는 Object 객체이기 때문에 기본 자료형(int, float, double, long)을 제외한 어떤 객체든 payload로 전달할 수 있다. 예시..

Android 2024.02.28
728x90
LIST