일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 시행착오
- android
- ListAdapter DiffUtil
- ansi2html
- map
- ktor api call
- ExoPlayer
- android ktor
- ChatGPT
- AWS EC2
- build with ai
- list map
- exoplayer cache
- video caching
- 유튜브
- FastAPI
- 스피너
- getChangePayload
- llm
- kotlin list
- 독서
- DiffUtil.ItemCallback
- kotlin collection
- 안드로이드
- ListAdapter
- doc2vec
- Python
- ktor client
- android exoplayer
- android custom view
- Today
- Total
목록TIL - 안드로이드 (33)
버튼 수집상
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/csivMQ/btsg2Zx8NII/j3k9rpVuuiihR2Ni7aUXLK/img.png)
미리 보는 결론 UI 컴포넌트를 바꿔야할 때는 프래그먼트를 사용해서 앱 반응속도를 개선한다. 안드로이드 리소스 (비디오 플레이어, 브라우저 등)를 쓸 때는 액티비티를 사용한다. 필요한 스펙에 맞는 필요한 구조를 선택한다. 배경 현재 재직중인 회사는 MVVM 구조의 쇼핑몰 웹뷰 앱을 운영하는데, 자바에서 코틀린으로 옮기듯이 액티비티 위주의 앱을 싱글액티비티로 개선해야하지 않겠냐는 이야기가 나왔다. 자사에서 서비스중인 앱에 싱글액티비티 + Jetpack Navigation Component 구조가 적합할지 알아봤다. 1- 안드로이드 싱글액티비티를 사용해야하는 이유 (2020.5.27) 아래 글 번역 + 정리 Reasons to use Android Single-Activity Architecture with..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Xhaxa/btsggMSqm3M/t7QYa7qsqBZNgE7EADDLxk/img.gif)
기본적인 건데 까먹는 바람에 스크롤 리스너 달아서 오프셋 값 저장하기 등등 쌩 난리를 쳤었다.. 다시 잊지 않도록 기록해둔다. 문제는 onBindViewHolder 가 호출되는 시점에 매번 RecylerView.Adapter를 세팅해주고 있었던 것. adapter를 최초 한 번만 세팅하면 전체 세로 스크롤을 오르내리면서 onBindViewHolder()를 부르더라도 뷰홀더 안 쪽의 가로 스크롤 위치가 유지된다. 수정 전 (제대로 안 돌아감) private val mAdapter = GoodsAdapter() override fun onBind(data: Any?, position: Int) { initUI(data) } private fun initUI(data: ModuleData) = with(bin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nJamx/btsdtEYUxx9/IlPUhW1KR4rKTLAbKg2NIK/img.gif)
배경 이전에 sticky view 를 구현할 땐 LinearLayout.firstVisibleItemPosition 을 가지고 sticky를 띄울지 말지 판단했었다. // 예시 recyclerView.addOnScrollListener(object: RecyclerView.OnScrollListener() { override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { super.onScrolled(recyclerView, dx, dy) val lm = recyclerView.layoutManager as LinearLayoutManager val firstVisiblePosition = lm.findFirstVisibleItemPosi..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bbUDBp/btsdi17o2Vl/Jnm9wkuRrZvvk5RRUPGxck/img.png)
배경 리사이클러뷰 안에서 다른 뷰홀더를 덮으면서 펼쳐지는 두 줄짜리 리스트를 구현해야 했다. 그래서 드롭다운 UI가 액티비티 최상위에 그려지는 스피너 Spinner 를 선택했다. (참고 PopUpWindow) 과제1 드롭다운 리스트가 펼쳐지고 닫히는 시점을 알기 위해 AppCompatSpinner를 상속하는 커스텀뷰를 만들고 리스너 인터페이스를 달았다. 참고한 스택오버플로우 답변 Spinner: get state or get notified when opens Is it possible to know whether a Spinner is open or closed? It would even be better if there was some sort of onOpenListener for Spinners...
배경 같은 종류의 데이터가 각기 다른 json 키 이름으로 들어오는 api 가 있었다. 구글의 gson 라이브러리는 json 키와 데이터 클래스 변수명을 1:1로 매핑시키므로 별도의 처리가 필요했다. 예시 데이터 클래스 data class TestResponse( // 키 이름이 다른 json 값들을 읽어서 List에 add. val areaList: List? ) { data class AreaData( @SerializedName("itemType") val itemType: String?, @SerializedName("imagePath") val imagePath: String? ) } 응답값 json { "banner1" : { "itemType" : "banner1", "imagePath" :..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Eq6En/btr0gkMy2Eg/s2gPMMkKZ9ytTykcWkFv40/img.png)
themes.xml 파일에서 windowIsTranslucent=true 옵션을 지우고 앱을 다시 설치하니까 해결됐다. 관련 스택오버플로우 번역
배경 인트로에서 메인으로 넘어간 후, 웹뷰가 그려지기 전까지 하얀 화면이 비치는게 거슬렸다. 메인 액티비티 위에서 프래그먼트를 띄우는 방법밖엔 떠오르지가 않는다. 인트로 화면을 액티비티로 가져가면서 메인 액티비티에 웹뷰를 미리 그릴 수는 없는지 알아보면서 서치. Preloading an activity before displaying it? I am developing a game for android, it takes a few seconds of time to load everything before you can play. During this time or the splash screen, I would like to display a progress bar to show the ... stack..
스피너 Spinner 를 열지도 않았는데 뷰를 초기화하자마자 디폴트값으로 onItemSelectedListener를 탔다. 검색해보니, 아이템을 선택한 건지 아닌지 판별하기 위해서는 터치리스너를 빼서 플래그를 켜야하는 것 같았다. Android Spinner OnItemSelected ONLY on User Interaction I know that this question has been answered multiple times, but I have not found any of them satisfactory and certainly not elegant. The issue is that OnItemSelected gets fired not only when the u... stackoverflow..