이번에는 Data Access Object인 DAO를 만들어 볼 것이다. DAO는 안드로이드에서 DB의 insert, delete, update에 대한 편의성을 제공한다. Room DB를 사용할 때 코드에서 함수를 정의하고 호출하여 DB를 쿼리한다. 이러한 함수들은 SQL 쿼리들을 매핑한다. 주석(annotation)을 사용하여 DAO에 이러한 매핑을 정의하면 Room이 필요한 코드를 생성한다. DAO를 DB에 접근하기 위한 인터페이스로 생각하면 된다. 추가로, 쿼리를 생성할 때 컴파일러가 문법 에러를 검사해준다. (개인적으로 잘못된 컬럼을 조회하는 일은 적어질 거라 생각한다) sleep-tracker 데이터베이스에 아래 나열한 것들을 해야한다. night를 삽입한다. 존재하는 night에 종료 시간과 ..
오늘은 바텀시트에 이미 프로젝트에 적용되어있던 Material3 테마를 적용해본 내용을 적어본다. 먼저, 내 상황은 이렇다. 프로젝트에 Material3 테마로 색상이 정의되어 있었다. 바텀시트는 커스터마이징을 위해 별도 클래스로 작성되어 있다. (BottomSheetDialogFragment를 상속받고 있다.) 바텀시트의 버튼은 Material3 테마를 사용하지 않고 AppCompat 테마를 사용한다. 또, 프로젝트 테마의 parent는 Theme.Material3.Light.NoActionBar이다.(라이트 모드 기준) 여기서 문제가 되는 지점은 바텀시트의 parent를 누구로 지정해야 하는가 이다. BottomSheet라 검색하면 굉장히 많은 테마가 검색되는데 답을 먼저 말하면 Theme.Mater..
이번에는 BottomNavigationView의 모든 아이템이 선택되지 않은 상태로 만들어보려고 한다. 이 동작을 구현하게 된 배경은 BottomNavigationView와 FloatingActionButton을 같이 사용하기 위함이었다. FloatingActionButton(줄여서 FAB라 부르겠다)을 BottomAppBar 안에 cradle 모드로 anchor 시키며 사용하던 중, FAB를 눌렀을 때 다른 프래그먼트가 보여야하므로 이 때 BottomNavigationView(줄여서 BNV)의 다른 모든 아이템이 선택된 상태로 있으면 안됐다. BNV의 모든 아이템을 선택되지 않은 상태로 만들기 위해 여러 사이트를 돌아다니다 짧은 해결법을 찾았다. 일단 나는 코틀린을 사용하고 있어서 확장함수 형태로 구현..