ViewModel에서 코루틴 활용하기https://leveloper.tistory.com/213@Volatile이 어노테이션을 활용하면 다른 스레드에서 활용되어도 즉각적으로 보이게 해준다. 변수 선언시 이 어노테이션이 지정되었을 때 값을 메인 메모리에 적재하기
바인딩을 할 때 초기값이 null이어야 하는 이유 Fragment에서 onCreatView()가 호출될 때까지 레이아웃을 inflate할 수 없기 때문에 null을 허용해야 한다. null을 허용하기 때문에 null safety를 위해 ?를 꼭 포함하자! 그리고 계속
값을 전달 받을 곳에 %s.tools 속성으로 텍스트를 세팅하는 것이 포인트다.아래 코드에서 위 오류가 나는 부분은 어디일까?바로 cost 값을 받는 부분이다. 문자열을 입력 받는데 값이 비어있거나, 유효하지 않은 자료형일 경우 제목과 같은 오류가 난다. 그렇다면 해결
ViewModel을 안전하게 사용하자!사용자에게 결정하거나 추가 정보를 입력하라는 메시지를 표시하는 작은 화면. 전체 화면을 채우지 않고 사용자가 액션을 해야 계속 진행할 수 있다. 일반적으로 다음과 같이 생겼다.Alert DialogTitle (optional)Mes
날짜 형식을 지정(날짜 → 텍스트)하고 파싱(텍스트 → 날짜)하는 클래스다.“E MMM d”와 같은 패턴 문자열은 날짜 및 시간 형식의 표현이다. 2018년 1월 4일이면 “Wed, Jul 4”와 같이 된다.E → 요일d → 일M → 월y → 연도Locale 객체는 특
비동기 프로그래밍에 권장되는 코루틴은 멀티태스킹을 지원하고 단순히 스레드로 작업하는 것보다 레벨이 다른 추상화를 제공한다. 상태를 저장해 중단했다가 재개할 수 있다는 주요 기능이 핵심이다. 따라서 코루틴을 실행되거나 실행되지 않을 수 있다.Job → 생명 주기가 있는
앱 데이터를 자동백업하는 요소로 기본값은 true다. 앱의 자동 백업을 막으려면 다음과 같이 하자.
onCreateView에서 다음과 같이 실행한다. 그러나 이 방법은 메모리 누수를 일으킬 수 있다.How to set title in app bar with Navigation Architecture ComponentInterfaceFragmentActivity블로그
layout xml에서 if문을 사용하려면 LiveData와 람다식을 알고 있어야 한다.우선은 livedata를 준비하자.ImageView를 클릭하면 viewmodel 안 데이터의 상태에 따라 호출하는 함수를 다르게 하고 싶을 때 다음과 같이 활용한다.viewmodel
화면이 시작했을 때 Focus를 줄 EditTextView의 xml에 다음과 같이 설정.출발할 Fragment에서 키보드 올리기도착한 Framgment에서 KeyListener를 활용해 키보드 내릴 때 코드 → Listener 처리 주의FragmentLayout XML
다음과 같이 회원가입 시 약관을 출력하는 화면을 만들어보자!fragment_sign_up.xmllayout_sign_up_terms_list.xml → 바깥의 RecyclerView바깥 Adapterlayout_sign_up_inner_terms_list.xml → 안
기존 SearchViewEditTextViewRecyclerView EditText SearchLayout백그라운드stylethemefragmentfragment.xmlfragment.kt
https://developer.android.com/static/codelabs/jetpack-compose-basics/img/f0edd5dc6d108de.gif?hl=ko위 git에서와 같이 Show more을 클릭하면 ui가 바뀌는 코드를 짜고 싶다.
android:background="?attr/selectableItemBackground"코틀린은 자바와 다르게 생성자의 매개변수들을 클래스 내에서 멤버 변수로 자동으로 만들어 주지 않기 때문에, 클래스 정의 내에서 생성자 매개변수를 private var로 선언해야
null이 될 수 있는 경우, !! 연산자 대신에 안전 호출(?.) 연산자를 사용하는 것이 좋다. 더불어 다음과 같이 예외처리를 해두면 더 좋다.채팅을 하는 화면에서 메시지를 입력해도 화면에 출력되지 않는 오류가 있었다.\_messageList의 값을 업데이트하는 방식
Activity와 Fragment의 기본 틀을 미리 짜두고 싶어서 추상 클래스를 만들었다.viewBinding 부분을 제외하면 Fragment도 같은 구조를 사용하였기에 생략한다. 그리고 이 베이스 코드를 활용한 Activity 코드는 다음과 같다.그런데 다음 오류를
조건은 다음과 같다.채팅 기능을 recyclerView로 구현하고 있기 때문에 특정 type에만 애니메이션을 넣으려고 한다.아이템이 추가될 때 해당 아이템에만 애니메이션이 적용되어야 한다.코드로 살펴보자.xmladapter전체 코드를 살펴보면 좋을 것 같아서 전부 넣었
위치 정보를 가져오기 위해 권한이 허용되었는지 확인하는 코드다. 두 가지 권한이 허용되었다면 true를 반환하고, 아니면 false를 반환한다. FusedLocationProviderClient API를 사용해 위치 정보를 가져오는 로직에서 사용할 수 있다.FusedL
소스코드에 액세스하지 않고 함수를 기존 함수에 추가하는 것을 말한다. 코드로 보자.다음은 단일 책임 원칙에 따라, 데이터의 형식을 지정하기 위해 클래스를 수정하는 대신 확장 함수를 사용한 예시다.위와 같이 List 자료형을 쓰려고 했지만 room에서는 지원하지 않았다.
plugin을 추가한다.Fragment끼리 전달하기 위해 꾸러미처럼 만들 데이터 클래스에 @Parcelize 주석을 추가한다.navigation graph에서 데이터를 전달 받은 목적 fragment에 매개변수를 추가한다.출발 fragment에서 Safe Args로 데
이 코드를 그대로 실행시키면 앱이 시작되자마자 강제 종료가 되고 아래 오류가 뜬다.Fragment를 호출했을 때 필요한 매개변수 retrieveChatList가 없다는 이야기다. 바꿔 말해서 매개변수의 기본값을 설정하지 않아 이런 오류가 생긴 거다.Navigation
SafeArgs를 활용한 NavArgs의 argument 초기화하기? safeArgs로 데이터를 전달 받고, 다른 화면으로 이동한 다음 백 버튼을 누르면 전달 받은 매개변수 때문에 아래와 같은 에러가 난다. 채팅 화면을 클리어하고 세팅 화면으로 들어갔다가 백 버튼을
copy() 함수는 기본적으로 데이터 클래스의 모든 인스턴스에 제공된다. 이 함수는 일부 속성을 변경하지만 나머지 속성은 변경하지 않고 그대로 두기 위해 객체를 복사하는 데 사용된다.DataBinding을 활용해서 viewModel의 값을 활용하는 코드다. viewMo