본문 바로가기

반응형

분류 전체보기

(54)
[Android + Kotlin] IllegalStateException: Page(s) contain a ViewGroup with a LayoutTransition (or animateLayoutChanges="true") 에러 수정 요즘 업무가 바쁘다보니, 게시글 작성이 뜸합니다. 방금 간단한 exception 을 잡게되어 짧게 글 작성합니다. RecyclerView 의 adapter에서 item layout에 android:animateLayoutChanges="true" 를 적용하였습니다. 그런데, 아래와 같은 exception이 발생!! java.lang.IllegalStateException: Page(s) contain a ViewGroup with a LayoutTransition (or animateLayoutChanges="true"), which interferes with the scrolling animation. Make sure to call getLayoutTransition().setAnimateParen..
[Android+kotlin] PagingDataAdapter 에서 삭제기능 구현하기 이전 개발 코드에서 PagingDataAdapter와 DataSource를 이용하여 paging 리스트를 구현한 부분이 있었습니다. 그런데, 게시물 상세화면에서 삭제시, 목록 갱신(adapter.refresh()) 를 하게되는데, 페이징 했던 페이지까지 표시되지 않는 문제가 있었습니다. 확인해보니, DataSource 클래스에 getRefeshKey()를 무조건 return 0으로 해서 발생한 이슈였습니다. (만들다 말았나봅니다. 아님 귀찮았던가....;;) 처음에는 일반 리스트와 같이 adapter의 items에서 removed를 해주고, notifyItemRemoved()를 해주려고 했으나, PagingDataAdapter 의 items는 snapshot()으로 가져와야 하고, List 클래스를 사용..
[Android + Kotlin] Notification Trampolines 이슈 해결하기 얼마전에 사용자 문의로 들어온 이슈인데, statusbar에 푸시 알림을 눌러도 앱실행이 되지 않는다는 내용이었습니다. 주변에 있는 안드로이드 폰에서 재현도 안되고.. 특정 설정에 따라서 발생할만한 이슈도 아니어서.. 조금 난감한 상황이었습니다. 이것저것 해보던 중에 "다른 앱 위에 표시" 설정을 OFF 로하니 재현이 되었습니다. 원인은 "Notification Trampolines" 이슈였습니다. https://developer.android.com/about/versions/12/behavior-changes-12?hl=ko#notification-trampolines 동작 변경사항: Android 12를 타겟팅하는 앱 | Android Developers Android 12를 타겟팅하는 앱에 영향을..
[Android + Kotlin] TextView에 <a> tag URL링크 적용하기 서버에서 html 태그 형태로 string을 내려주면, 이를 TextView에 표현하는 기능을 구현하는 것이 이번 미션이었습니다. 그 중 tag가 있었고, 클릭시 외부 웹브라우저로 연동이 되어야 했습니다. 처음엔 단순히 Linkify를 사용해서 구현을 하면되겠다 싶었는데, 아래와 같이 일반 텍스트에 테그가 적용되는 경우가 있어서 Spannable로 구현방법을 변경해야 했습니다. 네이버 일단, 구글링을 해봅니다. stackoverflow에 좋은게 있네요.ㅎㅎ 낼름 가져다 사용합니다.^^ fun TextView.onUrlClicked(onClicked: ((String) -> Unit)? = null) { text = SpannableStringBuilder.valueOf(text).apply { getSp..
[Android+Kotlin] 외부저장소 파일 목록 가져오기 (디렉토리 위치, 최신순) 지난 게시글에서 앱 내의 녹음 파일을 외부저장소(내장 메모리 > Music)로 이동시키는 것을 했는데요. 그것에 이어, 이동시킨 저장소의 파일 목록을 표시하달라는 요구사항이 있었습니다. 아래는 지난 게시글입니다. 필요하신 분은 참고하세요.^^ [Android+Kotlin] 외부저장소에 파일 저장하기(Android Q 이상) 얼마전에 앱 내부에 저장된 녹음 파일을 외부저장소(내장 메모리 > Music)로 내보내기(export) 해달라는 요구사항이 들어왔습니다. Android 10(Q) 이상부터 Scoped Storage가 적용되어 MediaStore를 이용하여 heeeju4lov.tistory.com 이번 개발의 핵심 포인트는 특정 저장소(내장 메모리 > Music)의 파일 목록을 최신순으로 불러오는 기능..
[Android+Kotlin] 외부저장소에 파일 저장하기(Android Q 이상) 얼마전에 앱 내부에 저장된 녹음 파일을 외부저장소(내장 메모리 > Music)로 내보내기(export) 해달라는 요구사항이 들어왔습니다. Android 10(Q) 이상부터 Scoped Storage가 적용되어 MediaStore를 이용하여 파일을 옮기는 방법으로 개발을 해보겠습니다. 간략한 파일을 옮기는 방법은 1. MediaStore 에 저장 파일 할 파일의 정보(ContentValues)를 생성 2. ContentValues를 MediaStore에 insert 3. insert하고 얻은 uri에 파일 저장 4. MediaStore에 IS_PENDING 값 update 위의 순서로 개발을 시작하겠습니다. 1. MediaStore 에 저장 파일 할 파일의 정보(ContentValues)를 생성 val v..
[Android+Kotlin] Logcat 로그 전체 보기 팁 (잘림현상 극복~) 안드로이드 스튜디오의 logcat을 사용하다보면, 긴~로그가 표시되다가 잘리는 현상을 볼수 있다. 이는 logcat 한줄의 최대길이가 4k(4*1024) 이기 때문이다. 그래서, 전체 로그를 보기위해서는 4k 단위로 로그를 끊어서 표시하면 된다. object Logr { fun d(tag: String, msg: String) { if(msg.length > 4000) { Log.d(tag, msg.substring(0, 4000)) Logr.d(tag, msg.substring(4000)) } else { Log.d(tag, msg) } } } 사용법은 Logr.d(TAG, "4k 넘는 로그 메시지가 들어감...") 위와 같이 호출하여, 4k가 넘으면 4k만큼만 잘라서 로그를 찍고, 재귀호출을 통해서 ..
Linkify 에서 WEB_URL 패턴을 커스텀해보자. 얼마전 운영팀에서 전달받은 이슈 리포트 내용중에 작성한 게시물에 링크가 이상하다는 문의가 있어 살펴보았습니다. TextView 에 Linkify 를 이용하여 URL 패턴을 자동으로 링크가 생성되도록 한 코드였습니다. if(PatternsCompat.WEB_URL.matcher(text).find()) { LinkifyCompat.addLinks(this, PatternsCompat.WEB_URL, "") } URL 패턴을 위와 같이 PatternsCompat.WEB_URL 을 사용하였습니다. 그랬더니.. 1.aaaa 2.bbbb 와 같은 패턴에도 링크가 생성되었습니다. 아마도, naver.com 이런 패턴에도 PatternsCompat.WEB_URL은 링크로 인식이 되는 듯 싶었습니다. 그래서, 패턴을 ..

반응형