728x90

Android 37

[Android] ViewPager2 - Runnable 객체로 자동으로 이미지 slide 하기

탑툰을 클론코딩 하는 도중 이미지가 자동으로 slide 되는 UI를 구현해야 했다. ViewPager2를 이용해서 구현해보도록 합시다 1. ViewPager2 선언 MainActivity에 HomeFragment가 존재하고, HomeFragment안에 ViewPager2를 다음과 같이 작성했습니다. // fragment_home.xml 2. ImageView가 포함된 페이지 레이아웃 만들기 ViewPager2의 각 페이지에 사용될 ImageView를 포함하는 레이아웃 XML 파일을 만들어야 합니다. 저는 사진만 들어가므로 ImageView 하나만 작성했습니다. 즉, Fragment에 뷰들을 관리하기 위해 ViewPager2를 작성했고, 뷰를 띄워줄 레이아웃을 지금 작성합니다. // slide_image_..

Android 2024.03.17

[Android] View의 LifeCycle(생명주기)

View의 LifeCycle 안드로이드에서 View의 라이프사이클은 뷰가 생성되고, 화면에 나타나며, 상호작용하고, 사라지기까지의 과정을 포함합니다. 이 과정은 여러 콜백 메소드들을 통해 관리되며, 각 메소드는 뷰의 특정 상태 또는 단계에 대응합니다 시작하기 onAttachedToWindow() View가 window에 연결될 때 호출되며, 뷰가 화면에 표시될 준비가 되었음을 알린다. View 초기화 작업을 수행하는 데 사용할 수 있다. addView() 함수를 호출하여 View를 View 그룹에 추가할 때 호출한다. 측정하기 measure() / onMeasure() 이 단계에서 뷰의 크기가 결정된다. measure() 메소드는 시스템에 의해 호출되며 실제 크기 계산은 onMeasure()에서 수행된다..

Android 2024.03.16

[Android] Fragment에서 Binding 객체를 null로 설정해야 하는 이유

Fragment에서 onDestroyView에서 binding 객체를 null로 설정하는 것은 메모리 누수를 방지하기 위한 중요한 관행입니다. Fragment의 LifeCycle은 Activity의 LifeCycle과 다르며, 특히 뷰의 생성과 소멸 과정에서 차이가 있습니다. Fragment View 생성 => onCreateView View 소멸 => onDestroyView Activity View 생성 => setContentView() View 소멸 => onDestroy() 호출 받을때 까지 유지 Activity에서 "binding = null"을 설정하지 않는 이유 액티비티의 View 생명주기는 액티비티 자체의 생명주기와 밀접하게 동기화 되는 것이 당연합니다. setContentView()를 ..

Android 2024.03.15

[Android] ViewBinding 총 정리

View Binding 뷰 바인딩 이전에 개발자들은 findViewById 메소드를 사용하여 XML에 정의된 뷰를 코드로 직접 찾아서 사용했습니다. 하지만 이 방법은 ① 타입 안전성이 보장되지 않고, ② View ID가 변경되거나 제거될 경우 런타임 시점에서 앱이 충돌할 위험이 있습니다. View Binding은 이러한 문제점을 해결하기위해 도입되었습니다. 바쁘신 분들은 제일 아래 3줄 요약을 보시길 바라겠습니다. findViewById와의 차이점 타입 안전성 컴파일 시간에 생성된 바인딩 클래스를 통해 뷰를 참조하기 때문에 타입 안전성 보장 null 안전성 null 체크를 수행하지 않아도 되므로 코드가 더욱 간결해진다. (findViewById의 경우 뷰가 존재하지 않을 경우 null을 반환하므로 반드시..

Android 2024.03.14

[Android] Android가 뷰를 그리는 방법

Android 프레임워크는 레이아웃의 루트 노드를 그리고 레이아웃 트리를 측정하고 그린다. 트리를 이동하고, 잘못된 영역을 교차하는 각 View를 렌더링하여 그린다. 각 ViewGroup은 draw() 메소드를 사용하여 각 하위 요소를 그리도록 요청하고 각 View는 자체 그리기를 담당한다. 뷰를 그리는 과정 3가지 과정은 다음과 같다. Measure : 뷰의 크기를 정함 / 측정계 Layout : 뷰의 위치를 정함 / 좌표계 Draw : 뷰를 캔버스 위에 실제 그리는 과정 뷰의 좌표계를 설정하는 단계는 Measure 단계이다. 또한 뷰의 좌표계를 사용하는 단계는 Layout 단계와 Draw 단계이다. 뷰의 좌표계를 사용하는 단계에서는 이미 뷰의 좌표계가 정의되어 있다. 안드로이드 뷰는 혼자서 존재할 수..

Android 2024.03.11

[Android] ViewPager2에 대해서 feat.RecyclerView

ViewPager2는 Android 에서 수평 또는 수직 방향으로 스와이프하여 화면을 전환할 수 있는 라이브러리이다. ViewPager2는 RecyclerView를 기반으로 구현되어 있다. ViewPager2의 구조와 구현 방식은 RecyclerView의 유연성과 효율성을 활용하여 안정적인 페이지 관리와 스와이핑 경험을 제공한다. RecyclerView2는 내부적으로 RecyclerView를 사용하여 페이지들을 관리하고 표시한다. => 뷰를 재사용하고 스크롤링 매커니즘을 활용할 수 있음을 의미함 ViewPager와 ViewPager2는 주로 Fragment를 관리하고 전환하는 데 사용된다. 이 컴포넌트들은 앱 내에서 여러 페이지 또는 탭 간의 스와이프 가능한 인터페이스를 구현하는 데 이상적이다. 각 페이..

Android 2024.03.10

[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
728x90
LIST