if (study)/Android
⎈ 참고 ⎈ '짤막 기록'은 나 혼자만 전후 맥락을 알아볼 수 있는 불친절한 설명의 글에 붙이는 말머리입니다. 나중에 수정되어 사라질 수도 있습니다. Paging library Paging library는 Android Jetpack에서 추가된 라이브러리다. RecyclerView + LiveData 조합을 사용하면 무한스크롤을 뚝딱 구현할 수 있다. 사용 방법은... 공식 문서나 미디엄 블로그들을 뒤져보면 잘 나와있음 🙃 Paging library를 쓰면 아래와 같은 점이 편리하다. AsyncPagedListDiffer를 사용하고 있어서 diffing 처리를 알아서 해줌 무한스크롤 구현시 이전/다음 데이터를 로드할 타이밍 체크(스크롤 위치 변화 감지 등등..)할 필요가 없음 추가 데이터 로드 후 UI ..
안드로이드에서 동일한 레이아웃을 반복적으로 뿌려주는 리스트형 UI를 만들기 위해 RecyclerView가 사용된다. RecyclerView를 사용하려면 Adapter, LayoutManager, ViewHolder 이렇게 세가지 준비물이 필요하다. 그 중에서 Adapter는 데이터 리스트를 실제 눈으로 볼 수 있게 itemView로 변환하는 중간다리 역할을 한다. Adapter가 맡은 역할은 크게 아래의 세가지로 나눌 수 있다. RecyclerView에 보여줄 데이터 리스트 관리 View 객체를 재사용하기 위한 ViewHolder 객체 생성 데이터 리스트에서 position에 해당하는 데이터를 itemView에 표시 오늘 글에서는 이 중에서 ListAdapter를 적용해서 3번을 효율적으로 처리하는 방법..
Fragment는 액티비티 위에서 부분 화면을 구현할 수 있게 해준다. 안드로이드 앱을 만들 때 정말 흔하게 쓰이는 요소 중 하다나. Fragment를 생성하는 가장 간단한 방법은 다음과 같다. val newFragment = MyFragment() Fragment를 생성하는 쪽에서 특정한 데이터를 넘겨줘야 하는 경우가 종종 있는데, 이럴땐 어떻게 해야할까? val index = 1 val newFragment = MyFragment(index) 이렇게 생성자로 바로 넘겨주는 방법을 썼다가 앱이 강제종료 되는 현상을 나를 포함해 많은 사람들이 한번쯤은 겪어보지 않았을까 싶다. Fragment의 공식 문서를 확인하면 가장 위쪽에 생성자를 만들때 알아야 하는 주의 사항이 적혀있다. All subclasses..
안드로이드에서 사용자가 날짜를 선택할 수 있도록 DatePicke나 DatePickerDialog를 사용한다. 달력은 직접 만들려면 손이 많이 가서 잠깐 보여주는 용도면 거의 다 기본 뷰를 쓰는거 같다. 이미 지나간 날짜는 선택할 수 없다던가, 오늘 기준으로 1개월 이내의 날짜만 선택가능하게 한다던가... 사용자가 선택할 수 있는 날짜에 범위가 필요한 경우가 있다. '확인'버튼을 눌렀을 때 현재 선택된 날짜를 검사해서 선택이 불가능하다고 안내 메세지를 보여주는 방식으로도 처리할 수 있지만, DatePicker 자체에서 아예 선택을 막을 수 있게 minDate, maxDate 속성을 제공한다. xml에서 설정할수도 있고, 코드로 설정할 수도 있다. 설정하는 방법 date 값은 long 타입(millisec..
안드로이드에서 시간을 설정하기 위해 보통 TimePicker가 사용된다. spinner와 clock 두가지 모드가 있는데 아래와 같이 생겼다. Timepicker의 분단위 시간은 1분 단위로 설정되어 있는데, 나는 0, 5, 10 이런식으로 5분 간격으로 표시하고 싶었다.. 기본 TimePicker엔 interval을 따로 설정할 수 있는 속성이 없다. 그래서 시간 간격을 바꾸고 싶다면 코드로 설정 해줘야한다. 시간 간격 설정하기 Spinner 타입 TimePicker는 NumberPicker 2개가 나란히 붙어있는 형태다. 리플렉션을 활용해 TimePicker에서 분단위 시간을 표시하는 NumberPicker 객체를 가져오고, NumberPicker의 void setDisplayedValues(Stri..