전체 글 9

[Android] 날짜와 시간 다루기: LocalDate, LocalTime, LocalDateTime

참고: 본 문서는 Kotlin으로 작성되었습니다, 오늘은 날짜와 시간을 다루는 Java API인 LocalData, LocalTime, LocalDateTime에 대해 포스팅하고자 합니다. 안타깝게도 LocalDateTime은 Android minSDK 26 이상에서 지원하는데요. minSDK가 그 이하라면 서드 파티 API인 ThreeTenABP를 사용하여 동일하게 사용할 수 있습니다. 이 방법에 대해 포스팅 해보고자 합니다. 1. ThreeTenABP 사용하기 프로젝트 내의 app 폴더에 있는 build.gradle 파일의 dependencies에 아래와 같이 추가합니다. dependencies { implementation 'com.jakewharton.threetenabp:threetenabp:1..

[Android] 다른 Activity 로부터 결과 받아오기

참고: 본 문서의 코드는 Kotlin으로 작성되었습니다. 오늘은 다른 Activity에서 결과를 받아 오는 방법에 대해 설명하겠습니다. 기존에는 startActivityForResult 메서드를 사용했지만, 호출 Activity가 종료될 경우 Uri를 제대로 가져오지 못하는 문제가 있어 deprecated 되었습니다. 그래서 ActivityResultLauncher를 사용해 결과를 받아오는 방법에 대해 설명하고자 합니다. 1. ActivityResultLauncher 생성하기 2. 다른 Activity 시작하기 3. 호출된 Activity의 Result 설정하기 1. ActivityResultLauncher 생성하기 Activity나 Fragment의 registerForActivityResult 메서드..

[Android] NumberPicker 사용하기

오늘은 안드로이드 View 중 하나인 NumberPicker에 대해 포스팅하고자 합니다. 보통 날짜나 시간에 대한 입력을 받을 때 많이 사용하는데요. 입력을 숫자로 직접 받는 것 보다 직관적이여서 활용하기 좋습니다. 안드로이드에서 기본으로 제공하는 DatePicker 혹인 TimePicker가 있지만 Custom 으로 만들 때 NumberPicker를 사용할 수 있습니다. 1) Layout XML에서 NumberPicker 추가하기 2) Activity나 Fragment에서 Min, Max, Value 설정하기 3) OnValueChangedListener 등록하기 1) Layout XML에서 NumberPicker 추가하기 Layout XML 파일에서 를 통해 Layout에 View를 추가할 수 있습니..

[Android] 뒤로 가기 (Back Button) 클릭 시 이벤트 처리

오늘은 Anroid에서 뒤로 가기 (Back Button) 클릭 시 이벤트 처리에 대해서 다루고자 합니다. Activity에서 Back Button 처리는 onBackPressed 함수를 override하여 사용할 수 있고, Fragment에서는 다음의 두 가지 방법으로 이벤츠 처리를 할 수 있습니다. 1) OnBackPressedCallback를 상속하는 익명 클래스 인스턴스를 생성한다 2) Activity의 OnBackPressedDispatcher에 해당 인스턴스를 등록한다 1) OnBackPressedCallback를 상속하는 익명 클래스 인스턴스를 생성한다 이 추상 클래스의 생성자는 인수로 Boolean을 받습니다. 인수는 back button 클릭 시 콜백의 실행 여부를 결정합니다. 그리고 추..

1. 자료 구조와 알고리즘

주어진 문제에 맞는 자료 구조를 선택하는 것이 필요하다. 제한된 리소스 안에서 효율적인 자료 구조를 선택해야 한다. 1. 문제에 필요한 basic operation을 결정 2. 각각의 operation에 대한 리소스 제약을 정량화 3. 요구 사항에 맞는 자료 구조를 선택 ADT(Abstract Data Type): 자료형과 연산 모임 (logical form) Data Structure: ADT의 구현 (phsyical form) Design Pattern: 1) Flyweight: 동일한 Object들을 Single Instance로 지정 2) Visitor: 각각의 Node에 해당하는 Activity를 정의하고 모든 Node를 방문하는 함수를 작성 3) Composite: 각 Object의 공통된 메..

자료 구조 2022.05.13

[Android] AlertDialog 사용 하기

오늘은 안드로이드의 AlertDialog를 사용하는 방법에 대해 포스팅하고자 합니다. 사용자의 확인을 위한 간단한 Dialog나, 짧은 텍스트 입력을 받을 때 주로 사용하는데요. 더 복잡한 것은 DialogFragment를 직접 구현하여 만드는 것이 좋습니다. 1) Builder 생성하기 AlertDialog는 Builder 객체를 통해 인스턴스를 생성할 수 있는데요. 먼저 아래와 같은 생성자를 통해 context를 인수로 하여 Builder 객체를 얻을 수 있습니다. AlertDialog.Builder(Context) 2) Builder로 커스터마이징 Builder 객체를 얻었으면 아래와 같이 다양한 메서드를 사용하여 Dialog의 항목들을 수정할 수 있습니다. Builder setMessage(Cha..

Layout XML 파일 안에 다른 Layout 추가 하기

Android 개발 시 Layout XML 파일 안에 다른 Layout을 추가 하는 방법을 정리하고자 합니다. 보통 하나의 XML 파일 안에 한 화면에서 보여지는 모든 Layout과 View를 포함하는 경우가 많을텐데요. 어떤 Layout이나 View가 다른 화면에서도 동일하게 사용이 된다면, 파일을 분리하여 관리를 용이하게 할 수 있습니다. 그리고, ViewBinding을 사용하는 경우에 자식 Layout에 대한 ViewBinding 참조를 얻을 수 있는 장점이 있습니다. 방법: 부모 Layout XML 파일에서 자식 Layout을 아래와 같이 추가합니다. 장점: ViewBinding을 사용하는 경우에 자식 Layout의 ViewBinding 참조를 Id를 통해 얻을 수 있습니다. 다음과 같이 부모 L..

RecyclerView에서 ListAdapter를 쓰면 안 되는 이유

앱 개발 도중 도움이 될 만한 것들을 적어보려고 티스토리를 개설 했습니다. 오늘은 RecyclerView에서 기본 Adapter외에 추가적으로 Android에서 제공하는 ListAdapter를 쓰면 안 되는 2가지 이유에 대해서 글을 적어보고자 합니다. 두 가지 이유는 다음과 같습니다. 1) 참조가 동일한 List를 제출하는 경우, 업데이트가 안 된다. 2) Data Class의 속성을 바꾸는 경우, 업데이트가 안 된다. 1. 참조가 동일한 List를 제출하면 업데이트가 안 된다. RecyclerView Adapter에 List를 넘겨주는 경우 보통 ViewModel에 원본을 저장해두고, Activity나 Fragment에서 LiveData 형태로 넘겨받게 됩니다. ListAdapter에 List를 업데..