일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- react
- bottomNav
- Redux
- 옵션메뉴꾸미기
- 커스텀옵션메뉴
- state_checked
- 코틀린
- Android
- ContextAPI
- JavaScript
- JS
- custom
- Hooks
- 팝업메뉴 꾸미기
- Dialog
- javaSrcript
- itemBackground
- toolkit
- 메뉴클릭
- 리액트
- framework
- 팝업메뉴
- readAsDataURL
- redux/toolkit
- Node
- 자바스크립트
- 안드로이드
- hoos
- nodejs
- Menu
- Today
- Total
대기업을 향한 디벨롭 블로그
스톱워치를 만들어보자 2 (리사이클뷰를 이용해 랩타임찍기) 본문
스톱워치 두번째이다 랩타임만 구현하면 끝이다. 랩타입은 스크롤뷰말고 리사이클 뷰로 만들거다
먼저 리사이클뷰를 만들어줬다. 시간과 버튼사이 중간에 만들어줬다.
리사이클뷰에 들어갈 아이템이다. 리스트 하나 요소이다.
그다음 Adapter를 만들어서 연결시켜주자. 먼저 onCreate함수안에 LayoutManager를 설정해주자 LinearLayoutManager로 설정함.
binding.labTime.layoutManager = LinearLayoutManager(this)
어댑터클래스를 만들어주었다. 안에 뷰홀더까지 만들어줬다.
labTime(리사이클러뷰).apdater에 연결시켜줌
먼저 어댑터에서 onCreateViewHolder를 구현해주었다. 여기선 labTimeViewHolder를 반환해줘야한다. 그리고 labTimeViewHolder인자로 LabtimeitemBinding타입을 binding변수로 받아준다. 그래서 Activity형태의 inflate가 아닌 다른형태로 보내준다.
1. 첫번째 인자로 LayoutInlfater.from(parent.context) 여기서 context를 넘겨주는데 parent는 ViewGroup의 context이기 때문에 context를 넘겨줄 수 있다. 이렇게 첫번째인자로 LayoutInflater를 만들준다.
2. 두번째 인자로는 ViewGroup을 넘겨주어야하는데 parent는 ViewGroup이기 때문에 parent를 넘겨준다.
3. 세번째 인자로는 Boolean타입을 넘겨준다. 만약 true를 넘겨준다면 parent가 리턴되고 false라면 XML최상위 뷰가 리턴된다.
다음은 getItemCount이다. 리턴값으로는 아이템갯수를 리턴하면되는데 랩타입버튼이 누를때마다 count갯수가 올라가야되기 때문에 lateinit으로 선언해주었다.
다음 Adapter에 이 함수를 만들어줘라 이함수는 랩타입 버튼을 눌렀을때 그때의 시간을 파라미터로받고 , count에 넣는다 0번째넣어야 맨위로 가기 때문에 add(0,tim)을 해주었다. 그리고 notifyDataSetChanged()함수는 옵저버인데 데이터가 새로들어왔으므로 새로고침해라 이런함수이다. RecyclerView에 포함되있는 함수이다.
onCreate함수안에 있던 reset버튼 클릭리스너다. 타이머가 재생중에 기록버튼이 활성화됬을때 클릭하면 binding.labTime.adapter에 labTimeAdapter를 넣어주었었는데 그걸 다시 labTimeAdapter형변환하여 addLabTime()함수를 사용할 수 있게했다. 그리고 그 함수에 인자로 time을 전달해준다. time은 넘어가서 Adpater에있는 count에 add된다.
onBindViewHolder에서는 데이터를 잡고있다. 우리가 스크롤할때 BindViewHolder가 계속 호출된다. 그 넘어가는 그데이터의 position 즉 해당하는 count[position]을 알 수 있다. 그값을 고대로 넘겨준다.
그 값만 있어봤자 View에 삽입할 수 없기때문에 뷰홀더에서 LabtimeitemBinding을 가지고 있는 binding에 labTimeText에다가 넘어온 count[position]을 넣어준다. 그럼 스크롤할때마다 보여질려는 데이터가 바뀌면서 자연스러워 질거다. 이게 바로 리사이클러뷰이다. 말그대로 뷰를 재활용하며 보여지는 뷰에만 데이터를 넣어 사용자에게 보여진다. 리사이클러뷰는 나중에 더 자세히 다루도록 하겠다.
여기에서 테스트를 한번해보자
랩타입은 잘찍히는데 time으로 넘어온값이 그대로찍힌다 time은 10ms마다 1씩 올라가기때문에 이걸 파싱해주자. 그리고 분(min) 처리도해줘야한다 그럼다시
함수안에 position은 스톱워치에 time으로 10ms단위이다. 그러므로 분 , 초 ,ms단위로 포멧하여 text에 넣어준다.
다시한번 테스트 해보자
문제점을 찾아봐라 퀘스트가 하나더 생겼다.
바로 초기화할때도 labtime이 초기화되어야한다. 구현해보자
랩타임이 들어있는 count(arrayList)를 clear()함수로 모두 삭제해주고 notifyDataSetChanged()로 새로고침해준다.
그리고 초기화버튼을 눌렀을때 labTimeReset()함수를 호출해준다.
테스트해보자
이제 더이상 고칠게없다. 거의 뭐 똑같이 구현했다고 봐도 무관하다.
*느낀점 : 안드로이드 이것저것 하나씩 터득하여 응용해서 만들었다. 처음엔 리사이클러뷰가 어렵고 이해가 잘안갔는데 계속보고 또 보고 하다보니 내것이 된거같다. 리사이클러뷰는 더 공부하고 마스터하면 자세히 써서 올릴것이다. 나의 핸드폰에있는 스톱워치와 똑같이 구현되서 짜릿하고 기쁘다. 아직멀었다. 더 많이 앉아있는 놈이 더많이 아는거고 , 더많이 처본놈이 더 잘한다.
'나는안드로이드개발자' 카테고리의 다른 글
웹뷰를 이용하여 프론트엔드 웹 만들기 (0) | 2022.06.14 |
---|---|
Web View 만들기 (0) | 2022.06.12 |
스톱워치를 한번 만들어보자 1 (재생,정지,초기화) (0) | 2022.06.10 |
액션바 , 상태바 숨기기 (0) | 2022.06.08 |
Activity 전환 , 뒤로가기버튼만들기 Activity finish (0) | 2022.06.08 |