목록분류 전체보기 (21)
yourginieus

1. 생명주기 오류 방지 라이프사이클 콜백에서 리소스를 설정할 때는 해제도 해 줘야 함 onStart() 에서 무언가를 설정했을 경우, onStop()에서 정지 또는 해제해야 함 2. LifecycleObserver 내가 직접 onStart(), onStop() 등에서 리소스를 설정 및 해제할 필요 없이, Jetpack이 제공하는 licecycle library를 사용하면 component 자체가 라이프사이클의 변화를 감시하고 변화가 발생했을 때 필요한 작업을 수행함 lifecycle library의 main parts Lifecycle owners : 라이프사이클을 가지는(소유하고 있는) 컴포넌트 Activity와 fragment Lifecycle owerner는 LifecycleOwner 인터페이스를..

LifeCycle 모든 activity와 fragment는 생명주기를 가짐 Activity의 lifecycle은 액티비티가 최초로 초기화되었을 때부터 최종적으로 파괴되었을 때까지, 그리고 시스템에 의해 메모리가 회수될 때까지 액티비티가 통과할 수 있는 다양한 상태로 구성 됨 사용자가 앱을 시작하고, activity 사이를 이동하고, 앱 내부와 외부로 이동하고, 앱을 종료하면 activity의 state 가 변경됨 이러한 state는 activity의 status를 나타냄 Activity lifecycle 상태가 변경될 때 일부 동작을 변경하거나 코드를 실행해야 하는 경우가 많음 그래서 Activity 클래스 자체는 물론 AppCompatActivity 같은 하위 클래스도 모두 set of lifecycl..

1. Safe Args 플러그인 설정 및 사용 사용자가 앱 내에서 게임 결과를 공유하기 위해서는, 하나의 fragment에서 다른 fragment로 매개 파라미터를 전달해야 함 이러한 transaction의 오류를 방지하고 type-safe로 만들기 위해, Safe Args라는 Gradle 플러그인 사용 이 플러그인은 NavDirection 클래스들을 생성하며, 우리는 이 클래스를 코드에 추가하면 됨 Safe Args 플러그인이 필요한 이유 대부분의 경우 앱은 fragments 간에 데이터를 전달해야 함 어떤 fragment에서 다른 fragment로 데이터를 전달하기 위한 방법 중 하나는 Bundle 클래스의 instance를 사용하는 것 Android Bundle은 key-value를 저장하는 저장공..

1. 프로젝트에 Navigation components 추가하기 Navigation component란, 앱의 화면 간에 전달되는 복잡한 탐색, 전환 애니메이션, deep linking, 컴파일 시간 확인 argument를 관리할 수 있는 라이브러리! STEP 1 : navigation dependencies 추가 네비게이션 라이브러리를 사용하려면 그래들 파일에 종속성을 추가해야 함 Gradle Scripts 폴더 > 프로젝트 수준의 build.gradle 파일 맨 위의, 다른 ext 변수들이 있는 곳에 navigationVersion 변수 추가 최신 navigation 버전을 확인하기 위해서는 Android developer documentation의 Declaring dependencies 확인! e..
Fragment fragment는 Activity 안의 UI의 일부 또는 동작을 나타냄 여러 fragment를 하나의 activity로 결합하여 multi-pane UI를 구축할 수 있음 또한 많은 activity에 fragment를 재사용할 수 있음 - fragment는 자체 lifecycle이 있어 자체 input events를 받을 수 있음 - Activity가 실행되고 있는 동안 fragment를 추가 또는 삭제할 수 있음 fragment UI는 XML layout 파일에 정의 됨 STEP 1 : Fragment class 추가 새로운 fragment를 위한 Kotlin class를 만드는 것부터 시작 File > New > Fragment > Fragment(Blank) 선택 Fragment 이..

Data binding 이전까지는 findViewById() 를 이용해 뷰에 대한 참조를 가져 옴 뷰를 생성하거나 재생성한 후, 이를 검색하기 위해 매번 findViewById를 사용하면 매번 view hierarchy를 탐색해야 함 앱의 뷰 수가 적은 경우에는 문제가 되지 않지만 여러 뷰가 있을 때는 문제가 됨 view를 variable에 캐싱하면 도움이 되지만, 이 역시 모든 뷰에 대해 각각 변수를 초기화해줘야 함 한 가지 해결책 -> 각 뷰에 대한 reference를 포함하는 object 만들기! = Binding Binding object는 앱 전체에서 사용할 수 있음 이러한 기술이 data binding !! 바인딩 개체가 앱에서 한 번 생성되면, view hierarchy를 탐색하거나 data..

ConstraintLayout 자식 뷰들을 유연하게 배치하고 크기를 조정할 수 있는 ViewGroup 크고 복잡한 layout을 만드는 데 도움이 됨 ConstraintLayout을 사용하려면 constraints 조건들을 추가해야 함 ** ConstraintLayut은 API 레벨 9 이상에서 사용할 수 있는 지원 라이브러리로 제공 됨 constraints : 두 UI 요소 간의 연결 또는 정렬 하나의 뷰를 다른 뷰, 상위 레이아웃 또는 보이지 않는 가이드라인에 연결하거나 정렬함 하나 이상의 수평 constraint와 수직 constraint를 정의하여 뷰를 배치함 constraintTopToBottom 등 체인 만들기 체인 : 양방향 제약 조건으로 서로 연결된 group of views 체인 내 뷰는..

사용자가 텍스트를 입력하는 방법 : EditText TextView는 사용자에게 텍스트를 입력받을 수 없음 input을 허용하기 위해서는, edit text라는 UI를 사용해야 함 EditText를 사용하면 됨 - TextView의 subclass! EditText에 나타나는 밑줄은 해당 내용이 editable함을 나타냄 hint : EditText에 나타나는 기본 힌트 설정. 사용자는 이 힌트를 통해 어느 값을 입력해야 하는지 알 수 있음 inputType : 사용자가 입력할 수 있는 입력 유형을 지정함 - 유형에 따라 적절한 입력필드와 화면상의 키보드를 표시해 줌 textPassword, phone, textPersonName, date, number 등 버튼을 이용하여 사용자와 소통 Button :..