분류 전체보기 112

어댑터 초기화후 데이터 넣기

통신을 하고 난후에 탭의 타이틀을 지정하거나 통신을 하고 난 후에 선택적으로 어댑터를 붙이는 경우가 있다. 이때 라이브데이터를 observe하고 난 후 ( 통신을 하고 난후)에 리사이클러뷰에 어댑터를 설정하지 않고 초기에 어댑터를 설정한 후에 나중에 데이터를 밀어주는 방식으로 변경하려고 한다. 리사이클러뷰 어댑터에서 해당 변수를 멤버변수로 지정 var type: QuestionType? = null set(value) { field = value notifyDataSetChanged() } override fun getItemCount(): Int = if (type == null) 0 else NUM_PAGES showEntry.observe { (entry, size) -> (viewDataBindi..

Android 2021.09.10

커스텀 이미지피커 [+페이징,앨범] (10, 11 대응)

보통 이미지피커는 라이브러리를 사용했었다 ( 편하니까.. ) 클라이언트가 아래와 같은 UI를 원한다. 처음에 전체 이미지들이 나오고 전체보기를 눌렀을때 앨범들이 나온다 앨범을 누르면 그 앨범에 해당하는 이미지들이 나온다 ( 그러면 다시 전체보기를 할수 없다. 전체보기 앨범이 없기 때문에 ) 시안대로. 사실 커서로 이미지를 가져온다는 개념은 알고있었으나 해보지 않았기 때문에 미지의 영역이었다. 처음엔 사용했었던 이미지피커를 import 해서 UI만 바꾸려고 했으나 이번기회에 학습해보고 싶어 밑바닥부터 구현했다. 일단 참고한 라이브러리는 TedImagePicker, Pickle 페이징 쿼리 리스트 DataBinding TedImagePicker X 쿼리 미사용 ( 모든 이미지 항목들에 대해 필터링 ) Seq..

Android 2021.09.07

문자열속 키워드 찾아서 하이라이팅

고려해야할점 1. 검색어는 여러개 있을 수 있다. 2. Spannable 처리 val (keyword, posts) = from val pattern = Pattern.compile("($keyword)") return posts.map { post -> val result = pattern.matcher(post.description) val content = SpannableStringBuilder() var start = 0 while (result.find()) { content.color(resourceProvider.getColor(R.color.black_4)) { append(post.description, start, result.start()) } content.color(resourc..

카테고리 없음 2021.08.19

[Refactoring] 여러개의 CheckBox -> Rx 핸들링

상품등록시 이런 형태의 UI 에서 Rx Subject + LiveData 처리 하는 방법 -> 해당 아이템이 선택됐을때를 Subject 으로 묶는게 최종 목적 private val _onDealTypeChanged: Subject 1. (기존) 체크박스에 CheckedChangeListener를 연결하여 뷰모델에서 combineLatest 로 묶는 방법 @BindingAdapter("checkedChanges") fun CheckBox.bindCheckedChanges(subject: Subject) { this.setOnCheckedChangeListener { _, isChecked -> subject.onNext(isChecked) } } Observable.combineLatest( _onDire..

Android 2021.08.05

앱 개발에 대한 생각

어플리케이션 개발의 핵심은 예외 처리라고 생각한다. 기능연결은 누구나 다 할 수 있지만 예기치 못한 에러 등을 어떻게 처리할것이며 UX적으로 어떻게 잘 풀어갈것인지가 중요하다. (보통 소켓통신이 아닌 1회성 통신으로 하기 때문에) 다른 기종에서 항목이 삭제됐거나 수정된경우의 처리도. 그리고 고려해야할점이 무조건 통신을 적게하는게 능사는 아닌것같다. 쿠팡처럼 매번 탭을 누를때마다, 화면을 변경할때마다, 돌아올때마다 통신하는 방식도 과하다고 생각하지만 그렇게 안하면 실시간 처리가 중요한 앱에서는 대응하기가 까다로워진다. 7.30 추가 내용 결국 구글에서 가이드라인을 제시해주고 개발자는 해당 내용을 이해하고 적용하는게 이상적이다. 구글에서 app oriented라고 하는 항목을 정리 ( 목표점, 이상적인 개..

기타 2021.07.08

Grid 격자 테두리 그리기(onDraw in RecyclerView.ItemDecoration)

RecyclerView.ItemDecoration 에서 onDraw 를 이용하여 직접 아이템에 대해 그리는 방법 아래와 같은 GridLayout 을 만들려고 한다. 고려해야할점 각 아이템 항목마다 회색 Stroke 맨왼쪽 아이템은 왼쪽에 뚫려져 있음 + 맨 오른쪽 아이템은 오른쪽이 뚫려져 있음 단순히 하나의 아이템 레이아웃에 사각형의 Stroke를 background로 지정하면 중간선들이 겹쳐보이는 현상이 있음 Stroke만큼의 padding 을 줘야함 RecyclerViewAdapter의 onBindViewHolder에서 맨 왼쪽과 맨 오른쪽인 경우 View를 숨겨야함 cf) 숨기는 코드 Sample override fun onBindViewHolder(holder: BaseViewHolder, pos..

Android 2021.07.04

앱 관리에 대한 생각

스타트업에서 아웃소싱을 받아 앱 개발하는 일을 위주로 하고 있다. 흔히 말하는 SI회사. 본인이 캐리할수 있는 능력이 있다면 SI 회사에서 활약하는것도 나쁘지 않다고 생각한다. 물론 이게 너무 동시에 프로젝트가 진행되기에 갈무리할 시간이 없다는게 문제긴 하지만.. (3개는 기본으로 동시에 하고 있는 것 같다. 심지어 5개 됐을때도 있었다..) 현재는 6개인것같다. 앱을 기능명세서 대로 만들어주기만 되는게 아니라 리뷰및 피드백을 반영하여 꾸준히 업데이트를 해야하고 코드품질부분에서도 이전에는 몰랐지만 나중에 알게되어 개선해야하는 점을 반영하고 해야할 시간이 필요하다. (예를 들어 홈화면에서 중첩 리사이클러뷰 대신 리사이클러뷰 하나로 처리하여 성능향상을 하거나.) 최근에 이렇게 만들어준 앱에서 뿌듯한 점을 발..

기타 2021.06.11