일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ayncAfter
- DispatchTouchEvent
- dispatchQueue
- 개발
- Dropdown
- IOS
- CalendarView
- RxJava
- progressbar
- 스터디
- retrofit2
- CSS
- HTML
- RecyclerView
- viewpager2
- javascript
- 실행지연
- imagepicker
- Android
- aab
- SWIFT
- SplashFragment
- MotionEvent
- web
- UIPickerView
- ViewModel
- InAppPurchase
- Kotlin
- Alamofire
- MemoList
- Today
- Total
목록분류 전체보기 (32)
멜팅비의 개발 공부
ViewModel에서 Dialog를 생성할 때 android.view.WindowManager$BadTokenException: Unable to add window 에러가 발생했다. 발생원인은 Dialog 생성 시 파라미터로 넘긴 context를 applicationContext로 넘겨서 발생한 에러였다. ViewModel에서 해결 할 때는 메서드 호출 시 view를 넘겨서 view.context를 사용했다. // data에 view import viewModel.someFunction(v)}" 일반적으로 해결하고자 할 때는 applicationContext 대신 activity(this)를 넘기면 된다.
SplashFragment를 MotionLayout으로 구현한 뒤 애니메이션이 끝난 뒤 MainFragment로 이동이 필요했다. 보통은 Activity로 구현해서 SplashActivity에서 MainActivity를 Intent로 실행시킨 뒤 SplashActivity를 종료시켰지만, 이번 프로젝트는 single Activity 구조로 Navigation을 통해 화면을 이동시켰다. override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) Handler(Looper.getMainLooper()).postDelayed({ lifecycleScope.laun..
Array → ArrayList val array = Array() val arrayList = array.toCollection(ArrayList()) ArrayList → Array val arrayList = ArrayList() val array = arrayList.toTypeArray()
개발 중 버튼을 눌렀을 때 특정 뷰에 강제적으로 스크롤하는 이벤트를 코드로 구현해야 했다. MotionEvent.obtain()을 통해 터치 이벤트를 수동으로 주면 되는데, 처음에는 스크롤 효과가 아닌 드래그 효과가 되어 많이 고생을 했다. 혹시라도 수동으로 스크롤 효과를 주고 싶은 경우가 있을 때 참고하면 좋을 것 같다. val downTime = SystemClock.uptimeMillis() val eventTime = SystemClock.uptimeMillis() val x = 0.0f val y = 250.0f val metaState = 0 val motionEvent1 = MotionEvent.obtain( downTime, eventTime+1000, MotionEvent.ACTION_D..
실행 지연 - DispatchQueue.main.asyncAfter(deadline: ) 특정 코드를 시간차를 두고 실행이 필요한 경우. 즉, 실행지연이 필요할 때 DispatchQueue.main.ayncAfter()를 사용하면 된다. DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1) { // 1초 후 실행될 부분 }
현재 개발 중인 앱이 슬롯머신처럼 버튼을 눌렀을 때 랜덤 하게 pick 해주는 기능이 포함되어 있는데 iOS에서 어떻게 구현해야 할지 검색하다가 DateTimePicker처럼 UIPickerView를 이용해서 자동으로 스크롤링되도록 구현하기로 했다. 그래서 UIPickerView를 Custom 하기 위해 필요한 부분들을 정리해봤다. UIPickerView 사용자 스크롤 막기 - 버튼을 눌렀을 때만 동작하게 만들기 위해서 사용자가 직접 터치하는 부분을 막을 때 사용 pickerView.isUserInteractionEnabled = false UIPickerView 아이템 높이 변경(row height) - 설정하고자 하는 높이를 return 하면 된다. func pickerView(_ pickerView..
코틀린에서 제공하는 함수 정리 코딩하면서 자주 사용하는 코틀린 함수들에 대한 내용을 정리하기 위해 포스팅하게 되었다. let() inline fun T.let(block: (T) -> R): R let 함수를 호출하는 객체를 블록의 인자로 넘기고, 블록의 결과 값을 반환한다. if (value != null) 과 같은 null check를 대신할 수 있다. -> null check 후 코드를 실행하고 싶거나, 블록 내의 결과물을 반환하고 싶은 경우 주로 사용 val str: String? = "Hello, World" // 기존 방식 if (str != null) { println(str) } // let을 사용한 경우 str?.let { println(str) } 실행결과 : Hello, World a..
최근 프로젝트에서 RxJava + Dagger + MVVM 패턴 + LiveData + Databinding 등을 접하게 되었는데 아직 안드로이드 초보 개발자로서 모르는 게 너무 많아서 조금씩 스터디를 하게 되었고, 그때 정리해둔 내용(틀린 부분이 많을 수도 있음) ReactiveX : 비동기적 데이터 흐름을 처리하는 프로그래밍 (Observable 시퀀스를 이용해 이벤트를 처리) Reactive Programming 프로그램에서 필요한 데이터를 직접 가지고와서 처리하는 방식이 아닌, 데이터를 받은 시점에서 처리하는 방식 데이터를 만들어내는 생산자와 이를 소비하는 소비자로 역할을 나눠 처리하는 프로세스를 가짐 생산자 - 데이터를 생산하여 전달하는 역할까지 수행 소비자 - 데이터를 받아서 처리하는 역할만 ..