android (23) 썸네일형 리스트형 [Android] Custom Calendar Finut을 개발하면서 여러 종류의 캘린더를 만들어야 했다. 기존에 만든 Calendar는 단순히 RecyclerView를 활용했었는데, View가 재활용되지도 않고 성능도 별로 좋지 않아 의미가 없었다. Calendar UI가 새로 디자인 되어서 이번 기회에 새롭게 Custom 하였다. 해당 포스팅은 하단의 결과물과는 달리 스케줄을 표시하는 기능을 제외하고 기본적인 Calendar를 만드는 과정만 다루고 있습니다...!! 1️⃣ fragment_calendar.xml - linearlayout_days: 월화수목금토일을 나타내주는 레이아웃 - viewpager_calendar: 월별 날짜를 나타내주는 레이아웃 - linearlayout_days에는 동적으로 요일을 넣어주었다. - 추후에 요일을 나타내는.. MVI( Model - View - Intent ) 🛠 MVI Pattern 안드로이드 생태계에서는 대부분 MVVM을 Architecture Pattern으로 선정해왔다. MVVM을 이용하면 ViewModel은 View를 참조하지 않을뿐만 아니라, 각 컴포넌트들을 기능에 따라 분리시키며 관심사 분리에 따른 개발을 진행할 수 있다. 하지만 MVVM으로 프로덕트를 디벨롭하다보면 애플리케이션의 여러 상태를 제어하지 못해 일어나는 버그들이 많다. ✅상태문제 애플리케이션에는 무수한 상태들로 구성되어 있다. 비즈니스 로직에 따라 앱의 상태는 자주 변경되고 관리되며, 이에 따라 UI Rendering이 적절하게 이루어져야 한다. 하지만 앱이 커지고 기능이 많아질 수록 이러한 상태관리가 힘들어지고 의도한 방향으로 제어되지 않을 가능성이 매우 크다. MVI는 이러한 상태.. Architecture Patterns (MVC, MVP, MVVM) MVI에 대한 글을 작성하기에 앞서 여러 Architecture Pattern들에 대해 간단하게 정리. 1️⃣ MVC ( Model - View - Controller ) 웹 애플리케이션에서 가장 많이 쓰이는 아키텍처 패턴 중의 하나이다. ✅ Model: 애플리케이션에서 사용되는 데이터와 데이터를 처리하는 부분이며, 비즈니스 로직을 나타낸다. ✅ View: UI 컴포넌트로 사용자에게 보여지는 부분이다. ✅ Controller: 사용자의 Action을 입력받고 처리한다. 모델과 뷰 사이에서 협력자 역할을 한다. [장점] 여러 개의 뷰를 모델에 빌드할 수 있다. 변경사항이 모델 전체에 영향을 주지 않는다. 데이터를 어떠한 형태의 가공 없이 반환한다. [단점] View와 Model 사이의 의존성이 높아질 수 .. [Jetpack Compose] State 보호되어 있는 글입니다. [Android] Fragment간 데이터 공유(Navigation, SafeArgs) Fragment간에 데이터를 공유하는 몇 가지 방법에 대해 적어보고자 한다. 물론 틀린 부분이 있을 수도 있다💦 1. Bundle() fragment의 데이터 전달은 많은 사람들이 bundle을 사용해서 처리해왔다. 사용 방법은 다음과 같다. val testFragment = TestFragment() val bundle = Bundle() bundle.putString("id", et_id.text.toString()) testFragment.arguments = bundle parentFragmentManager.beginTransaction) .replace(R.id.fragment_container, testFragment()) .commit() //ReceiveFragment var restul.. [Android] Navigation Backstack Controll and Pass Data Navigation을 이용하면 어떻게 fragment에서 결과값을 받아올 수 있을까? NavBackStackEntry와 LiveData를 활용하면 fragment의 결과값 전달을 할 수 있다. NavBackStackEntry - 말 그대로 NavController의 BackStack으로 집입시켜주는 메서드이다. - 이를 통해서 SavedStateHandle에 접근할 수 있다. - SavedStateHandle은 viewModel의 상태를 저장해놓은 Saved State를 다루기 위한 객체이다. 그렇다면 navigation에는 backstack을 관리하기 위한 옵션들에 대해서 간단히 짚고 넘어가자 popUpTo는 주어진 도착점이 나올때까지 백스택을 팝업한다. popUpToInclusive 속성이 1) fa.. [Android] Multi Select Gallery만들기 with Paging 앱에서 사진을 불러와야 할 때 어떻게 하셨나요?? 보통 Intent를 사용하여 핸드폰의 갤러리를 열고 사진을 가져왔을 것입니다. 이 방식으로 했을 때 제 스마트폰은 삼성갤러리로 접근이 되어 이미지 다중 선택이 되지 않습니다. (아니면 제가 방법을 모르는걸지도,,?) 그래서 저는 MediaStore에서 이미지 파일을 모두 불러온 뒤 Recyclerview에 로드해주었습니다. 많은 스마트폰에는 보통 수천개에서 수만개의 사진이 저장되어 있기 때문에 한번에 뷰에 로딩하는 것이 아니라 Paging을 이용하여 스크롤할 때마다 원하는 청크만큼 데이터를 요청하여 가져옵니다. 이렇게 하면 갤러리앱을 열지 않고 성능 저하 없이 직접 커스텀해서 사용할 수 있습니다! 1️⃣ Dependency추가 - version은 3.0... [Android] Paging3 Library in Jetpack Paging3란? Jetpack의 라이브러리 중 하나로 다양한 데이터 소스로 부터 데이터를 나누어 효과적으로 로딩해준다. 네트워크 또는 로컬 데이터베이스에서 데이터 페이지를 쉽게 로드할 수 있다. Paging3의 강력한 장점은 Coroutines 뿐만 LiveData, RxJava를 최고수준으로 지원한다. Paging3의 주요 클래스에 대해서 알아보자! 1️⃣ Paging Source - 네트워크 또는 데이터베이스에서 페이징된 데이터 로드를 담당하는 추상 클래스이다. - 이 클래스를 구현하려면 페이지 키 타입을 정의해야한다. - PagingSource에서 로드된 데이터는 PagingData 인스턴스로 관리된다. - 데이터를 검색하는 방법을 정의한다. PagingDatasource에는 크게 1) Posit.. 이전 1 2 3 다음