본문 바로가기

전체 글

(86)
[Android: Jetpack] ViewBinding 기초 ✍🏼 ViewBinding의 필요성 기존에는 뷰의 요소를 불러오기 위해서 findViewById를 사용한다. kotlin-android-extensions를 사용하면 findViewById를 생략하고 간편하게 쓸 수 있다. 문제는 서로 다른 xml에서 id를 동일하게 사용할 수 있기 때문에, koltin-android-extensions를 통하면 코드가 꼬일 수 있다. 이에 대한 해결방안으로, 구글에서는 안드로이드 스튜디오 4.1부터 koltin-android-extentions의 지원을 중단하고 뷰 바인딩을 사용하도록 안내하고 있다. ✍🏼 ViewBinding이란? ViewBinding을 활성화하면 각 xml파일에 대해 ViewBinding클래스를 상속받는 개별 뷰 바인딩 클래스가 자동으로 생성된다. ..
Fragment Lifecycle 예제 Fragment 소스파일은 진짜 별거 없어서 위의 Github링크로 대체한다. 생성-정지-파괴 순서로 모두 진행해보았다. 앱을 실행하자마자 위의 로그 스크린샷에서 보는 것 처럼, 액티비티의 onCreate()가 호출되었고, 이어서 프래그먼트의 onAttach()→onCreate()→onCreatView()→onViewCreate()→onViewStateRestore()→onStart()가 차례로 진행된다. 그런데 여기서 눈여겨 볼 점은 바로, 프래그먼트의 onStart() 호출 이후, 액티비티의 onStart()와 onResume()이 호출되며, 그 이후에 다시 프래그먼트의 onResume()이 호출된다는 것이다. 액티비티를 생성한 다음 프래그먼트를 진행하고, 액티비티를 Forground로 보낸 다음(실..
Fragment와 Fragment 생명주기Fragment란? 📚 Fragment는 FragmentActivity내의 어떤 동작 또는 사용자 인터페이스의 일부를 나타낸다. Fragment는 자체적인 수명주기(Lifecycle)를 가지며 자체 입력 이벤트를 수신하고, 액티비티 실행 중에 추가 및 삭제가 가능하다. 다른 액티비티에서 재사용할 수 있는 “하위 액티비티”와 같은 개념이다. Fragment를 사용하는 이유 개발자가 뷰 계층에 복잡한 변경 내용을 관리하지 않아도 태블릿과 같은 큰 화면에서 역동적이고 유연한 UI디자인을 구현할 수 있다. 액티비티의 레이아웃을 여러 Fragment로 나누면 런타임에서 액티비티의 외관을 수정할 수 있다. 액티비티의 변경 내용을 액티비티가 관리하는 백 스택에 보존할 수 있다. 하나의 Fragment를 여러 액티비티에 포함할 수 있다...
액티비티(Activity) 📚 액티비티(Activity) 액티비티(Activity)는 사용자 인터페이스(UI) 화면을 관리하는 컴포넌트다. 액티비티 역할을 하기 위해서는 AppCompatActivity()를 상속해야 하며, AppCompatActivity가 기본적으로 가지고 있는 생명주기 메소드를 재정의해서 원하는 기능을 구현해야 한다. 💡 Java 안드로이드의 경우, public class MainActivity extends Activity의 형태로 Activity 클래스를 상속해준다. 근데, Kotlin이라고 다른건 아니다. AppCompatActivity()는 Activity의 자식이기 때문. class MainActivity : AppCompatActivity() { override fun onCreate(savedIns..
안드로이드 구성요소 📚 안드로이드 구성 요소 안드로이드 주요 용어 정리 구성요소 설명 Activity 액티비티 사용자 인터페이스 화면을 구성하는 컴포넌트 Service 서비스 백그라운드에서 실행되는 컴포넌트. 시각적인 사용자 인터페이스를 가지지 않는다. Intent 인텐트 컴포넌트에 액션, 데이터 등을 전달하는 메시지 컴포넌트 Intent Filter 인텐트 필터 수신할 수 있는 인텐트를 정의하여 컴포넌트를 정의하는 역할을 하는 컴포넌트 Broadcast Receiver 브로드캐스트 리시버 배터리 부족, 언어 설정 변경 등의 특정 브로드캐스트를 수신하거나 반응하는 컴포넌트. 시각적인 사용자 인터페이스를 가지지는 않는다. Content Provider 콘텐트 프로바이더 애플리케이션 간의 데이터 공유를 위해 표준화된 인터페이스..
[Android] ignoring header x-firebase-locale because its value was null과 Realtime Database 사용이 안되는 오류 해결 Authentication과 Realtime Database를 사용할 때, ignoring header x-firebase-locale because its value was null로그가 표기되거나 데이터가 실시간으로 저장이 되지 않는다면 sdk 버젼을 낮추는 다운그레이드가 도움이 될 수 있습니다. 저를 포함한 제 주변인들도 sdk31.3.10 이상을 사용하는 사람들이 이런 오류를 겪었는데, 일단 구글링해서 나오는 비밀번호 8자? Manifest.xml 수정? DNS IP 추가? 전부 씨알도 안먹히더군요ㅋㅋ 어쩌다 10분~ 15분 뒤에 적용이 되긴하던데, 테스트 한번 하려고 하염없이 기다릴순 없지 안겠습니까. 저는 sdk 버전을 다운그레이드하여 해결하였습니다. 그럼 방법을 살펴보겠습니다. https:/..
[Android] 토스트 메세지 노출 시간 조정 방법(Toast message time adjustment) 들어가며... 본인은 개발을 하며 토스트 메세지를 많이 사용하는 편이다. 물론 사용자가 이걸 보는지는 모르겠다. 나도 다른 앱 쓸때 밑에 뭐 뜨면 눈길이 잘 안가더라(ㅎ) 보통 토스트 메세지 객체는 아래와 같다. Toast.makeText(this, "message here", Toast.LENGTH_LONG).show() 여기서, Toast.LENGTH_LONG과 Toast.LENGTH_SHORT 둘 중 하나를 사용하여 시간을 조정한다. LENGTH_LONG은 3.5초 LENGTH_SHORT는 2초 가끔 2초가 너무 길고, 3.5초가 너무 짧다고 생각될 때가 있다. 그럴때 사용하기 위해 토스트 메시지 시간 조정 함수를 기록해 둔다. 토스트 메시지 노출 시간 조정 Toast 메세지의 가시 시간 아래와 ..
[Kotlin basic] forEach Kotlin에서 forEach를 사용하는 방법에 대해 좀더 심화적으로 알아보겠습니다. # 개요 forEach는 순서가 있는 데이터(CharSequence, Iterable 등)에 대한 확장함수로, 기존의 for문을 사용하던 외부 반복(Iteration)에서 내부 반복(Iteration)으로 바꿔줄 수 있게 하여 가독성을 좋게 만든 확장 함수입니다. 먼저 외부 반복에 대해 알아보겠습니다. 외부 반복이란 다음과 같이 외부에서 반복하는 것을 말합니다. fun main() { val exampleList = mutableListOf(1, 2, 3) for (numb in exampleList) { println(numb) } } 이 코드를 forEach를 이용하여 내부반복으로 바꾼다면 다음과 같이 바뀌게 됩니다..