본문 바로가기

[안드로이드 | Jetpack] 안드로이드 Navigation 구현하기 Jetpack 컴포넌트 중 가장 궁금하다 싶던 요소였던 Navigation을 간단히 구현을 해 보았다. 항상 그랬듯이 단계부터 우선적으로 나열해보고, 차례대로 정리를 해 보겠다. 구현하고자 한 바는 정말 간단하게 Navigation 컴포넌트를 추가하고, Splash 화면에서 메인 화면으로 넘어갈 수 있게 만드는 것이었다. 우선 Jepack 네비게이션의 취지가 무엇이냐함은 아래 영상을 참조하는 것이 좋겠다. 단순하게 이해하기로 Navigation의 취지라 하면 기존 여러개의 액티비티로 이루어져 intent등을 통해 데이터를 주고받거나, 액티비티간의 이동간 생명주기를 신경써야하던 부분이 있었는데 이를 단일 액티비티 + ViewModel 구조를 통해서 화면전환 및 데이터 송수신 문제를 해결할 수 있는, 앱의 ..
[안드로이드 | 코틀린] 코틀린으로 Queue 사용해보기 프로젝트에서 요구사항 구현을 위해 코틀린의 Queue 클래스를 활용해보기로 했다. Queue는 기본 java.util 패키지 내에 포함되어 있으며, Queue를 사용하면 IDE가 java.util.* import를 새롭게 추가하는 것을 확인할 수 있을 것이다. 그럼 Queue를 쓸 때에 사용 가능한 function을 살펴보자. - add(element: E) Any type의 element를 Queue에 추가한다. Any는 코틀린의 모든 클래스의 최상단 super 클래스로, 결국 어떤 클래스든지 문제없이 사용이 가능하다는 것이다. Queue에 element를 더하는데 성공하면 true를 return하며, 실패시 IllegalStateException을 발생시킨다. - element() element()는..
[안드로이드 | JSON] Json 파일 Parsing해 List로 만들기 프로젝트 리소스에 포함된 Json 파일을 불러와 List로 만들 일이 생겼다. 이 과정을 위해 해준 일들을 우선 나열해보면 4단계 정도가 있다. 1. 프로젝트에 Assets 폴더를 만들고 불러오고자 하는 json 파일을 집어넣는다. 2. GSON 라이브러리 및 Room Database import 3. Json 파일로부터 만들고자 하는 Data class를 정의 (3-1) 필요한 경우에 따라 TypeConverter 추가 정의 4. Json 파일을 String 객체로 Parsing > Gson 사용해 List 뽑아내기 Json Parsing을 위해 Gson과 AAC의 Room을 사용했다. 그러면 1번부터 쭉 밟아보자. 1. 프로젝트에 Assets 폴더를 만들고 불러오고자 하는 json 파일을 집어넣는다...
[안드로이드 | Flutter] 안드로이드 스튜디오가 dart 파일을 읽지 못할 때 Flutter 개발을 진행하면서 간헐적으로 .dart 파일이 말대로 하얗게 질려서 실행 불가능한 파일이 되는 문제가 있었다. 뭐라고 검색해야될지 갈피가 잘 안잡힐 때 우연히 우클릭으로 이를 해결하는 방법을 찾을 수 있었다. 문제는 dart 파일이 안드로이드 스튜디오에서 Plain Text로 마킹되어 있었고, 이는 해당 파일을 우클릭해 Mark as Dart를 해주면 본래대로 실행이 가능해지는 것이었다. 물론 반대로 Plain Text로 마킹도 가능하다. (어떤 필요에 있어서 있는 옵션인지는 잘 모르겠다.)
[안드로이드 | Flutter] 빌드 오류 : Could not build the application for the simulator. Error launching application on iPhone 11 Pro Max. 플러터 테스트를 열심히 하던 도중에 Toast 메시지를 보여주는 Widget을 추가한 뒤로 아이폰 시뮬레이터에서 빌드가 실패하면서 설치가 되지 않는 이슈가 있었다. 이를 해결하기 위해 처음에는 안드로이드 스튜디오 > Tools >Flutter > Flutter clean 을 써봤으나 소용이 없었고, 보다 상단에 나왔던 오류메시지에 명시된 대로 맥 터미널에 sudo gem install cocoapods 를 입력해 넣었다. 그러면 Ruby를 이용해 빌드에 필요로 하는 CocoaPods 설치를 진행하며, 설치가 끝난 이후로는 오류없이 빌드가 잘 되는 것을 확인할 수 있었다. (매우 간단한 이슈였음)
[안드로이드 | Flutter] Android Studio에서 첫 Flutter 프로젝트 시작하기 마음만 먹고 차일피일 못잡던 Flutter를 일단 시작을 해보기로 했다. 별도로 플러그인을 받는등의 시도를 하다가 후에 Android Studio에서 대부분의 절차를 마칠 수 있음을 알았다. 이번 설치는 안드로이드 스튜디오 3.5.1 버전에서 진행하였다. 1. Android Studio의 Configure > Plugins로 이동한다. 2. Marketplace에 Flutter를 검색해 설치한다. 3. Flutter 설치를 마치면 안내메시지에 따라 Android Studio를 재시작한다. 4. 다시 켜진 Android Studio 첫화면에 못보던 메뉴가 새로 생긴 것을 확인할 수 있다. 5. Start a new Flutter project를 클릭해 신규 Flutter 프로젝트 생성을 시작한다. 6. 프..
[안드로이드] CountDownTimer의 시간 Sync 문제 해결하기 프로젝트에서 MediaPlayer와 CountDownTimer를 사용하면서 몇가지의 애로사항이 있었는데, 이를테면 영상을 중지하고 다시 재개할 때의 기존의 타이머를 어떻게 다시 설정하냐는 것이었다. 왜냐하면 CountDownTimer에는 별도의 pause 기능이 없고, stop만이 가능했기 때문이다. 우선 기존의 요구사항은 아래와 같다. MediaPlayer는 10개의 영상을 연달아 재생한다. 각 영상은 각기 다른 재생시간을 가진다. 영상은 10초의 대기시간을 가진 뒤 재생을 시작한다. 사용자는 대기시간 및 재생중에도 상관없이 일시정지 및 다시시작(resume)이 가능하다. 일시정지 및 다시시작, 재생을 진행하는데 모든 타임라인이 일치하여야 한다. (남은 시간, 경과 시간 등) 여기서 포인트는 일시정지 ..
[안드로이드] RecyclerView에서 클릭한 아이템의 position을 간단히 받아오기 RecyclerView의 아이템 클릭시에 해당 아이템의 position을 받아와야 하는 상황이 있었는데, stack overflow에 나와있는 상당수 답변은 clickListener interface 따로 생성하고, 달아주는 등등 손이 가는것은 물론, 방식들도 굉장히 다양한 편이었다. 더 편한 길이 있을텐데(이거보단 덜 칠 수 있지 않을까) 싶은 마음에 둘러보다 좋은 솔루션을 찾았다. 1. RecyclerView에 달려있는 어댑터의 onBindViewHolder 메소드에서 파라미터로 넘어오는 holder의 itemView에 onClickListner를 설정한다. 2. onClickListener에 클릭시마다 holder.adapterPosition을 통해 아이템의 position을 가져온다..