본문 바로가기

ANDROID

(125)
[안드로이드] API 버전에 구애받지 않는 Notification 설정하기 기존에는 NotificationManager에 넘겨주기 위한 Notification 객체를 Notification 클래스로 생성해 전달하고 있었는데, 이 클래스는 오레오(API 21) 아래로는 deprecated된 메소드들이 많았던지라 deprecated 메소드를 대체하려 약간의 시행착오를 겪다가 좀 더 근본적인 솔루션을 찾았다. Notification 클래스를 NotificationCompat으로 빌드한다. 이때 Notification 클래스와의 차이점이라고 한다면 NotificationCompat을 initialize하는 과정에서 채널 ID를 추가적으로 넘겨주어야 한다는 점이다. NotificationCompat.Builder(this, CHANNEL_ID) .setContentInte..
[안드로이드] Inconsistency detected. Invalid view holder adapter positionViewHolder 최근 크래시 리포트에서 RecyclerView와 관련된 오류가 하나 집계되었다. Inconsistency detected. Invalid view holder adapter positionViewHolder 찾아보니 삼성 디바이스에서 발생하는 이슈로 올라와있는 스택 오버플로우 질문이 있었고, 나와있는 해결책중에 개인적으로 덜 복잡하다고 생각되는 솔루션을 사용해보았다. 방법은 1. LinearLayoutManager를 상속받는 LinerLayoutManagerWrapper 클래스를 만든다. ... class LinearLayoutManagerWrapper: LinearLayoutManager { constructor(context: Context) : super(context) {} constructor(..
[안드로이드 | RxAndroid | Room] no suitable method found for createFlowable room 해결 Room DB의 쿼리 결과를 Flowable으로 받고 싶었는데 빌드 실행 후 no suitable method found for createFlowable room.. 와 같은 오류가 발생하였다. Room에 사용하는 Dao 파일을 IDE가 실제 사용하는 자바 코드인 DaoImpl로 만드는 과정에서 나타나는 오류였다. 해결법은 단순했는데, Flowable 사용이 가능한 room 관련 implementation을 추가적으로 build.gradle에 포함시켜야 하는 것이었다. 기존에는 room과 rxJava 관련 implementation이 이미 들어가 있었으나 implementation "android.arch.persistence.room:rxjava2:1.1.1" 아래와 같은 implementation이..
[안드로이드] 안드로이드 스튜디오 Build 에러 | Unfortunately you can't have non-Gradle Java modules and > Android-Gradle modules in one project 기존 프로젝트의 마이너버전 개발을 위해 원본 프로젝트를 복사해 단순히 버전 네이밍만 바꾸어주었는데, 안드로이드 스튜디오에서 빌드 오류가 발생했다. Unfortunately you can't have non-Gradle Java modules and > Android-Gradle modules in one project 이후 스택 오버플로우에서 간단한 해결법을 찾았는데 해결방법은 아래와 같았다. 1. 안드로이드 스튜디오를 종료한다. (완전종료) 2. 프로젝트 폴더에 존재하는 .idea 디렉토리를 제거. 3. 프로젝트 폴더에 존재하는 .imi 확장자 파일을 전부 제거. 4. 안드로이드 스튜디오 Open, 빌드 재수행 기존 프로젝트가 빌드될 때의 속성이나 기타등등 설정값이 제거한 위치등에 존재하기 때문에 충돌..
[안드로이드] 안드로이드 스튜디오의 Inspect Code로 프로젝트 자가진단하기 최근에 안드로이드 스튜디오를 3.5.0으로 업데이트하면서 Lint라는 도구의 존재를 알게 되었고, 거기에서 나아가 Lint 도구가 포함된 Inspect Code를 안드로이드 스튜디오에서 활용할 수 있음을 알았다. 사용법은 매우 간단한데, 안드로이드 스튜디오 상단 메뉴에서 Analyze로 들어가 Inspect Code를 수행하면 된다. 그렇게 정해진 조건으로 분석을 수행하고 나면 다양한 관점에서 꽤나 상세한 내용을 가지고 에러 및 개선의 여지가 있는 부분들을 보여준다. 팀에서 코드리뷰를 하지 않거나 스스로 프로젝트를 점검해보고 최적화하고 싶은 개발자들이 간편하게 활용할 수 있는 좋은 방법이 아닌가 싶다. 다만 언제나 이런류의 리팩토링을 진행할 때에는 필히 먼저 저장하고, 부분적으로 개선 후 재실행 하는 3..
[안드로이드] getter for type : Int is deprecated on NetworkInfo 처리 기존 프로젝트에서는 기기가 인터넷에 연결되어 있는지 확인하기위해 NetworkInfo class를 가져와 클래스의 type을 ConnectivityManager의 파라미터로 확인했었는데 (아래처럼) ... val connManager = ApplicationClass.instance.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager// ConnectivityManager 클래스 val activeNetwork = connManager.activeNetworkInfo // NetworkInfo 클래스 if (activeNetwork.type == ConnectivityManger.TYPE_WIFI) { // something hap..
[안드로이드] RecyclerView의 사이즈를 애니메이션과 함께 바꾸기, 아이템이 추가될 때 애니메이션 적용하기 UI/UX를 구성하는 중에 유동적으로 사이즈를 바꾸는 RecyclerView의 구현이 필요했다. 목표로는 두가지 목표가 있었는데, 첫째로는 2개 이상의 아이템이 RecyclerView에 추가될 때 RecyclerView의 사이즈를 늘리기. 둘째로는 신규 아이템이 추가될 때 Fade in 애니메이션 적용하는 것이었다. 여러 방법들을 동원하던 중 코드 수도 적고 무난하게 사이즈를 늘릴 수 있는 레퍼런스를 찾았다. https://stackoverflow.com/questions/32835397/android-property-animation-how-to-increase-view-height Android property animation: how to increase view height? How to inc..
[안드로이드] Lottie 3.0.7 적용기 (json 파일 재생 라이브러리) 기존 안드로이드 프로젝트에 튜토리얼 단계에 적용하고자 GIF 에셋을 활용했었는데(Glide 라이브러리), GIF의 단점은 사이즈가 대체적으로 커질 수 있다는 점과, 기기별로 재생 속도가 천차만별로 달라지던 현상이 발생한다는 것이었다. 이를 대체하기 위해 새로 도입하게 된 게 JSON 애니메이션이다. JSON은 현재 여타 웹사이트에도 다양하게 적용되고 있는 애니메이션 포맷인데, 이를 안드로이드 등 기타 플랫폼에서 간편하게 적용이 가능하도록 만들어진 Lottie 라이브러리를 추가로 알게되었다. Lottie의 상세 소개는 아래에서. https://airbnb.design/lottie/ Lottie Easily add high-quality animation to any native app. Lottie is ..