Mobile App/Android19 [안드로이드] by viewModels, LiveData Observing 이 안되는 이유 ViewModel 초기화 하는 방법 우리는 데이터 보존을 위해 ViewModel 를 초기화하여 View(Fragmet, Activity) 에서 사용한다. ViewModel 를 초기화 하는 방법은 대표적으로 두 가지로 나눌 수 있다. 1. ViewModelProvider. private val viewModel: MyViewModel by lazy { ViewModelProvider(getViewModelOwner())[MyViewModel::class.java] } 2. by viewModels private val viewModel by viewModels() 겪은 이슈 as-is > to-be 로 코드 리팩토링할 때 as-is 에서 작업했던 ViewModel 초기화 방식과 to-be 방식이 위 두 가.. 2024. 2. 4. [안드로이드] 키보드 자판이 보이고 안 보이고 감지하는 콜백함수 (Keyboard show hide) 문제 정의 현재 회사 코드 정책 상, 싱글 액티비티를 유지해야 했고, Fragment 에 원하는 softInputMode 를 적용하고 싶었다. 그리고 AndroidManifest.xml 내에 windowSoftInputMode 가 세팅이 되어있지 않았다. 즉, default 모드 상태인 stateUnspectified 값이며 이 속성은 시스템에서 적절한 상태를 선택하거나 테마의 설정을 사용하게 한다. 그러다보니 Fragment UI 작업 시, 하단 버튼이 editText 에 focusing 이 될 때마다 올라오게 되며 원치않게 버튼이 뷰를 가리게 됐다. 매니페스트에 내가 원하는 속성을 적용하게 될 경우, 앱 내 여러 서비스들 중에 EditText 를 사용하는 부분에 영향이 가서 고민하게 됐다. 일단, A.. 2024. 1. 28. [안드로이드] 이전에 설치한 앱 이미지 파일이 재설치 후 왜 삭제가 안될까? (다른 앱 이미지 삭제 불가) *갤러리 폴더 삭제 아니 왜!!!!! 이전 빌드한 앱에서 외부저장소(공용저장소)에 이미지파일을 저장한 게, 삭제 후 재설치한 앱에서 모든 이미지 삭제로직에서 삭제가 안돼.... 왜 삭제가 안돼? 왜!!!!! 권한이 필요했다........ 다른 앱 이미지 업데이트 불가 모든 이미지가 삭제가 안되는 경우, // 이슈 상황 private fun removeImageFiles(context: Context) { val contentResolver: ContentResolver = context.contentResolver val externalStorageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) val folderPath .. 2023. 11. 15. [안드로이드] Fragment replace 이전 Fragment 버튼 리스너 동작 이슈 Fragment 간 이동 할 때 add, replace, remove, addToBackStack 등 다양한 방법으로 Fragment 를 다룰 수 있다. 내가 겪은 이슈는 A -> B 로 Fragment 를 이동할 시 replace 를 이용하면 기존 stack 에 쌓인 Fragment(A) 는 사라지고, replace 로 대체되는 Fragment(B) 만 남아 있어야 한다. 하지만, 그렇지 않았다. 그래서 Fragment(A) 에 있는 버튼 리스너 들이 Fragment(B) View 에서 눌리게 된다... 일단 나는 아래와 같이 코드를 작성해서, 범용적으로 Fragment 를 사용하려고 했다. replace, add, remove, popBackStack fun Activity?.moveFragment(.. 2023. 9. 25. [안드로이드] 이 앱은 이전 버전의 Android 를 위해 만들어진 것이기 때문에 현 기기에서 사용할 수 없습니다. (sdk 33 대응) 기간이 지나 Google store 에 앱이 보이지 않고, OS 13 대응하고 내부테스트로 앱을 말아도 "이 앱은 이전 버전의 Android를 위해 만들어진 것이기 때문에 현 기기에서 사용할 수 없습니다." 또는 "이 기기 버전과 호환되지 않습니다" 설치 버튼은 안보이고 왜? 저 두 문구가 보일까? 회사에서 이번에 Android OS 13 대응 건 때문에 서브 앱 하나를 버전 업데이트를 하게됐다. https://developer.android.com/google/play/requirements/target-sdk?hl=ko Google Play의 대상 API 수준 요구사항 충족하기 | Android Developers Google Play의 대상 API 수준 요구사항 충족하기 컬렉션을 사용해 정리하기 내.. 2023. 9. 18. [안드로이드] java. lang. NullPointerException: Attempt to invoke interface method 'int java.lang. CharSequence.Length()' on a null object reference (SwitchCompat Error) 오늘 만난 Error 이다. API 호환성을 위하여 AppComapat 위주로 뷰를 짜다가 겪은 Error 엿다. 왜 이러지? 하면서 Switch 로 바꿔보니, 역시나 상위 뷰가 AppCompat 이다보니, Switch 뷰를 사용할 수 없었다.. 사실 해결방법은 쉬웠다. SwitchCompat 뷰에서 속성을 넣어줘야 했던 부분을 내가 넣어주지 않아서 발생한 거였다. 계속 의아하긴 했었다.. 아니 무슨 CharSequence.length() 가 null 이지? 뷰를 만드는데, 왜 문자 시퀀스 길이를 체크하고 그게 널이라고 뜨는 걸까? Text 를 넣어줘야하는 게 아닌가? 라는 생각이 이어졌다. 결과적으로, andorid:textOff 와 android:textOn 속성을 넣어주면 된다. 그러면 정상적으로 .. 2023. 9. 4. [안드로이드] 커스텀 Switch (thumb 이미지 넣기, track 사이즈 조정) 이번 회사 개발과제에서 Switch 를 커스텀해서 만들어야 하는데 원하는대로 만들어지지 않아 고생한 걸 기록할 생각이다. Switch 는, 클릭시 Flag (true/false) 를 이용하여 on/off 를 할 수 있는 뷰다. Switch 는 Custom 을 하지 않을 경우는 아래와 같다. 내가 구현해야 할 디자이너가 만들어준 Switch 는 아래와 같다. 위와 같이 Custom Switch 를 만들기 위해서 필요한 파일은 아래와 같다. 일단, track 이랑 thumb 개념은 알고 있을 것이다. track 은 스위치에 길다란 부분이다. 그리고 돌출된 원형이 thumb 이다. shape_switch_thumb_off.xml => Vector 이미지 (디자이너가 만든 이미지를 svg 로 Import) sh.. 2023. 8. 31. [안드로이드] Error. You need to use a Theme.AppCompat theme (or descendant) with this activity. 커뮤니케이션 문제가 발생했었다. QA 프리징 기간에 코드를 수정하여 develop 브랜치에 push 를 했는데, 정기배포에 해당 커밋내용이 빠져버렸다. 역시나 이슈가 발생했다. 그래서 수정한 코드를 재반영한 긴급배포를 진행하고, Crashlitics 을 통해 모니터링하는 도중에 위와 같은 Crash 가 발생했다. You need to use a Theme.AppCompat theme (or descendant) with this activity. 위 에러는 말 그대로 M Theme.AppCompat 으로 해당 Activity 를 변경해서 사용하라는 말이다. 'You need to use a Theme.AppCompat theme (or descendant) with this activity.' Activ.. 2023. 8. 31. 이전 1 2 3 다음