제목과 같이 navigation 라이브러리를 활용하며 FragmentContainerView를 쓰고 있는데 navigation graph과 startDestination를 갈아끼워야 했다. 우선 의도대로 동작하는 줄 알았던 코드를 보자.intent로 특정 값을 받아오고
copy() 함수는 기본적으로 데이터 클래스의 모든 인스턴스에 제공된다. 이 함수는 일부 속성을 변경하지만 나머지 속성은 변경하지 않고 그대로 두기 위해 객체를 복사하는 데 사용된다.DataBinding을 활용해서 viewModel의 값을 활용하는 코드다. viewMo
groupBy와 groupingBy 함수는 비슷한 기능을 제공하지만 사용 방법과 반환값이 다르다.groupBy 함수는 Map<K, List<V>> 형태의 결과를 반환한다. 즉, 키와 키에 해당하는 요소들을 리스트로 묶은 맵을 반환한다. 이 함수는 컬렉션의 각
SafeArgs를 활용한 NavArgs의 argument 초기화하기? safeArgs로 데이터를 전달 받고, 다른 화면으로 이동한 다음 백 버튼을 누르면 전달 받은 매개변수 때문에 아래와 같은 에러가 난다. 채팅 화면을 클리어하고 세팅 화면으로 들어갔다가 백 버튼을
이 코드를 그대로 실행시키면 앱이 시작되자마자 강제 종료가 되고 아래 오류가 뜬다.Fragment를 호출했을 때 필요한 매개변수 retrieveChatList가 없다는 이야기다. 바꿔 말해서 매개변수의 기본값을 설정하지 않아 이런 오류가 생긴 거다.Navigation
plugin을 추가한다.Fragment끼리 전달하기 위해 꾸러미처럼 만들 데이터 클래스에 @Parcelize 주석을 추가한다.navigation graph에서 데이터를 전달 받은 목적 fragment에 매개변수를 추가한다.출발 fragment에서 Safe Args로 데
소스코드에 액세스하지 않고 함수를 기존 함수에 추가하는 것을 말한다. 코드로 보자.다음은 단일 책임 원칙에 따라, 데이터의 형식을 지정하기 위해 클래스를 수정하는 대신 확장 함수를 사용한 예시다.위와 같이 List 자료형을 쓰려고 했지만 room에서는 지원하지 않았다.
위 데이터 클래스에서 컬럼이 스네이크 케이스로 명명되어있지만, 코틀린에서는 카멜 케이스로 명명하기 때문에 @ColumnInfo 주석을 활용해 이름을 지정했다.그리고 Dao 쿼리에서 값을 참조하기 위해 :를 사용한다.ViewModelFactory는 ViewModel 인스
위치 정보를 가져오기 위해 권한이 허용되었는지 확인하는 코드다. 두 가지 권한이 허용되었다면 true를 반환하고, 아니면 false를 반환한다. FusedLocationProviderClient API를 사용해 위치 정보를 가져오는 로직에서 사용할 수 있다.FusedL
시간이 지나면서 변할 수 있는 값을 말한다. room 데이터베이스부터 클래스까지 매우 다양하고, 예시는 다음과 같다.채팅 앱에서 가장 최근에 수신된 메시지사용자의 프로필 사진recyclerView와 같은 list의 스크롤 위치상태가 시간이 지남에 따라 변하는 값이라면,
조건은 다음과 같다.채팅 기능을 recyclerView로 구현하고 있기 때문에 특정 type에만 애니메이션을 넣으려고 한다.아이템이 추가될 때 해당 아이템에만 애니메이션이 적용되어야 한다.코드로 살펴보자.xmladapter전체 코드를 살펴보면 좋을 것 같아서 전부 넣었
Activity와 Fragment의 기본 틀을 미리 짜두고 싶어서 추상 클래스를 만들었다.viewBinding 부분을 제외하면 Fragment도 같은 구조를 사용하였기에 생략한다. 그리고 이 베이스 코드를 활용한 Activity 코드는 다음과 같다.그런데 다음 오류를
null이 될 수 있는 경우, !! 연산자 대신에 안전 호출(?.) 연산자를 사용하는 것이 좋다. 더불어 다음과 같이 예외처리를 해두면 더 좋다.채팅을 하는 화면에서 메시지를 입력해도 화면에 출력되지 않는 오류가 있었다.\_messageList의 값을 업데이트하는 방식
android:background="?attr/selectableItemBackground"코틀린은 자바와 다르게 생성자의 매개변수들을 클래스 내에서 멤버 변수로 자동으로 만들어 주지 않기 때문에, 클래스 정의 내에서 생성자 매개변수를 private var로 선언해야
구현 할 디자인 Untitled Untitled Untitled modifier를 사용해 컴포저블을 수정할 수 있다. 컴포저블의 크기, 레이아웃, 동작, 모양 접근성 라벨과 같은 정보 추가 사용자 입력 처리 요소 클릭, 스크롤, 드래그, 확대
https://developer.android.com/static/codelabs/jetpack-compose-basics/img/f0edd5dc6d108de.gif?hl=ko위 git에서와 같이 Show more을 클릭하면 ui가 바뀌는 코드를 짜고 싶다.
우선 아키텍처가 왜 중요한지 생각해보자.Android 앱에는 Activity, Fragment, Content Provider, Broadcast Receiver 등 다양한 앱 컴포넌트가 있다. 이 컴포넌트들을 활용해서 사용자 경험을 앱에 녹이게 되는데 핸드폰은 리소스
기존 SearchViewEditTextViewRecyclerView EditText SearchLayout백그라운드stylethemefragmentfragment.xmlfragment.kt
다음과 같이 회원가입 시 약관을 출력하는 화면을 만들어보자!fragment_sign_up.xmllayout_sign_up_terms_list.xml → 바깥의 RecyclerView바깥 Adapterlayout_sign_up_inner_terms_list.xml → 안
화면이 시작했을 때 Focus를 줄 EditTextView의 xml에 다음과 같이 설정.출발할 Fragment에서 키보드 올리기도착한 Framgment에서 KeyListener를 활용해 키보드 내릴 때 코드 → Listener 처리 주의FragmentLayout XML