본문 바로가기

Android/Android Core39

[Android/Kotlin] 왜 notifyDataSetChanged 대신 DiffUtil을 사용해야 하는가? 안드로이드 앱 개발에서 RecyclerView를 사용하여 데이터를 표시할 때, 데이터 변경 사항을 UI에 반영하는 방법은 매우 중요합니다. 흔히 사용되는 notifyDataSetChanged()와 더 효율적인 DiffUtil에 대해 설명하고, 왜 DiffUtil을 사용하는 것이 더 나은 선택인지 예시를 통해 알아보겠습니다.1. DiffUtil이란?DiffUtil은 안드로이드의 RecyclerView에서 두 데이터 세트를 비교하여 변경된 항목들을 찾아내고, 해당 변경 사항만 RecyclerView에 업데이트하는 유틸리티 클래스입니다. DiffUtil은 RecyclerView의 성능을 최적화하고, 더 나은 사용자 경험을 제공하는 데 중요한 역할을 합니다.2. notifyDataSetChanged()의 문제점.. 2024. 6. 28.
[Android] 키패드가 올라오면서 UI 요소가 같이 올라오는 현상 해결하기 android:windowSoftInputMode="adjustPan"안드로이드 앱 개발을 하다 보면, 사용자가 텍스트 입력을 위해 키패드를 열 때 하단의 네비게이션 바나 특정 UI 요소들이 함께 올라오는 불편한 현상을 마주할 때가 있습니다. 특히, 이러한 문제는 하단에 고정된 네비게이션 바를 사용할 때 자주 발생합니다. 이번 포스팅에서는 이 문제를 간단히 해결하는 방법을 공유하고자 합니다.문제 상황아래와 같은 레이아웃을 가진 앱이 있다고 가정해봅시다. 하단에 BottomNavigationView가 고정되어 있고, 사용자가 텍스트 입력을 위해 키패드를 열 때 이 네비게이션 바가 같이 올라오는 현상이 발생합니다.   해결 방법이 문제를 해결하기 위해서는 AndroidManifest.xml 파일.. 2024. 6. 20.
[Android/Kotlin] 안드로이드 ConstraintLayout에서 1:1 비율로 뷰 설정하기 ConstraintLayout에서 layout_constraintDimensionRatio 사용법 ConstraintLayout은 매우 유연하고 강력한 레이아웃 시스템으로, layout_constraintDimensionRatio 속성을 사용하여 너비와 높이의 비율을 쉽게 설정할 수 있습니다.예를 들어, 너비와 높이를 1:1 비율로 설정하고 싶은 경우 다음과 같이 코드를 작성할 수 있습니다.  여기서 android:layout_width와 android:layout_height를 둘 다 0dp로 설정하고, app:layout_constraintDimensionRatio 속성을 1:1로 설정합니다.이 속성은 너비와 높이의 비율을 지정하는 것으로, 1:1은 너비와 높이가 동일하게 설정된다.. 2024. 6. 10.
[Android/Kotlin] 안드로이드 네비게이션: NavController 찾기의 두 가지 방법 비교 안드로이드 개발 시 자주 마주치는 네비게이션 컴포넌트, 특히 NavController를 찾는 두 가지 방법에 대해 알아보고, 각각의 장단점을 비교해보는 시간을 가지려고 합니다.안드로이드의 네비게이션 컴포넌트는 앱 내에서 화면 이동(네비게이션)을 용이하게 관리해 주는 매우 중요한 요소입니다. 그렇다면 NavController를 어떻게 찾을 수 있을까요? 아래에서 자세히 알아보겠습니다. 방법 1: 공식 문서 방식공식 문서는 Activity에서 NavHostFragment를 찾고, 그 안에 있는 NavController를 사용하는 방법을 권장합니다.val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as.. 2024. 5. 18.
[Android/Kotlin] BaseFragment를 ViewBinding과 DataBinding 방식으로 생성하는 방법 ViewBinding으로 BaseFragment 생성하기ViewBinding은 UI 컴포넌트에 대한 참조를 더 쉽게 관리할 수 있게 해주는 기능입니다. ViewBinding을 사용함으로써 null 체크나 findViewById 호출의 필요성을 줄일 수 있습니다.abstract class BaseFragmentVB(private val bindingFactory: (LayoutInflater) -> T) : Fragment() { private var _binding: T? = null protected val binding get() = _binding!! override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,.. 2024. 5. 13.
[Android] 안드로이드의 Instrumentation 클래스 소개 Instrumentation 클래스는 안드로이드 애플리케이션에서 앱의 동작을 모니터링하고 제어할 수 있게 해주는 강력한 클래스입니다. 이 클래스는 주로 테스팅과 앱 내부의 이벤트 시뮬레이션에 사용됩니다. 안드로이드 테스팅 프레임워크의 일부로서, Instrumentation 클래스는 애플리케이션의 생명주기 이벤트를 관찰하고, 키 입력이나 터치 이벤트 같은 사용자 인터랙션을 시뮬레이션하며, 다양한 종류의 테스트를 수행하는 데 필수적인 기능을 제공합니다. 주요 기능 및 사용법애플리케이션 생명주기 관리: Instrumentation 클래스를 사용하여 액티비티의 시작, 정지와 같은 생명주기 이벤트를 직접 호출할 수 있습니다. 이를 통해 테스트 중에 애플리케이션의 특정 상태를 재현할 수 있습니다.사용자 이벤트 시뮬.. 2024. 5. 7.
[Android] 안드로이드에서 Rect 클래스 활용하기 Rect 클래스는 안드로이드에서 사각형 영역을 정의할 때 사용되는 클래스입니다. 좌표 시스템에 기반하여, 사각형의 왼쪽 위 모서리와 오른쪽 아래 모서리의 위치를 정의함으로써 사각형의 위치와 크기를 나타냅니다. Rect 객체는 주로 뷰(View)의 크기나 위치를 계산하고, 그래픽을 그릴 때 영역을 지정하는 등의 목적으로 사용됩니다.Rect 클래스는 다음과 같은 네 가지 주요 필드를 가지고 있습니다.left: 사각형의 왼쪽 변의 x 좌표입니다.top: 사각형의 상단 변의 y 좌표입니다.right: 사각형의 오른쪽 변의 x 좌표입니다.bottom: 사각형의 하단 변의 y 좌표입니다.이 네 가지 좌표는 사각형의 위치와 크기를 완벽하게 정의합니다. 예를 들어, left가 10, top이 20, right가 30,.. 2024. 5. 3.
[Android/Java] ActivityResultLauncher 및 ActivityResultContracts 활용 방법 ActivityResultLauncher는 안드로이드 앱 개발에서 다른 액티비티로부터 결과를 받아오기 위해 사용되는 클래스입니다. AndroidX 라이브러리의 일부로, Android 11(R API 레벨 30)이 출시됨과 동시에 소개되었습니다. 기존의 startActivityForResult() 메서드와 onActivityResult() 콜백 방식을 대체하기 위해 도입되었으며, 사용하기 쉽고, 코드가 더 읽기 쉬워지고, 타입 안전성을 높여줍니다. 기본 사용 방법ActivityResultContracts 정의: ActivityResultLauncher를 사용할 때는, 어떤 타입의 액티비티 결과를 기대하는지 정의해야 합니다. 이는 ActivityResultContracts에 있는 다양한 계약 중 하나를 사용.. 2024. 5. 2.
[Android] RecyclerView의 notifyItemChanged 사용 시 발생하는 깜빡임 문제 해결 방안 RecyclerView에서 notifyDataSetChanged를 사용해 어댑터 아이템들을 업데이트할 때 발생하는 성능 문제를, 특정 아이템만을 업데이트하는 notifyItemChanged를 통해 해결할 수 있었다. 그러나 이 방식을 적용하더라도, 엘레베이터의 층수가 1초마다 변하면서 UI를 업데이트할 때 깜빡임과 버벅거림 문제가 계속 발생했다.이 문제의 원인을 조사해보니, Android의 RecyclerView를 위한 SimpleItemAnimator의 기본 애니메이션 효과가 원인임을 알아냈다.SimpleItemAnimator는 RecyclerView 아이템 애니메이션을 구현하기 위한 추상 기본 클래스로, RecyclerView.ItemAnimator를 확장한다.공식 문서의  RecyclerView.I.. 2024. 4. 22.
반응형