본문 바로가기

분류 전체보기

(25)
8월 한달 토이 프로젝트를 해보자! -10 : Firebase 실패기 (진행중) 일단 회원가입 페이지 및.. 만들었는데, Detail 페이지는 앞의 LogIn, ListFragment를 적절히 섞은 것과 비슷한 형태라 할 수 있다. (만들어는 놓았지만 포스팅은 생략하겠다는 말) 이제, 메인스트림의 틀은 잡혔다고 본다. 계속 이걸 유지하고 세팅, 새 포스트 작성 등 다른 요소를 추가하기에는... 심심하다. 둘도 결국 UI밖에 건드리지 못할테니까. 그런고로, 이제 만들어봅시다 데이터! firebase를 프로젝트에 연결하는 것으로 시작한다. 우선 프로젝트를 추가하는 것으로 시작할 것이다. 프로젝트 이름은... 음... 그냥 앱 이름으로 할까? 근데 나 이거 블로그에 썼나? 왜 기시감이 들지.. 프로젝트 레벨 build.gradle에 아래와 같이 추가해준다. buildscript { dep..
8월 한달 토이 프로젝트를 해보자! -09 : Adapter 높이 programmatically 설정해주기 다음 단계로 넘어가기 전에, 계속 거슬렸던 DiaryListBindingAdapter 의 높이를 설정해주자. 미리 말했듯, 별도의 인자를 넘기지 않고 다이렉트로 설정해주기 위해서 전역변수들을 모아 관리하는 StaticValue 클래스를 만들어주었다. 나중에 넓이값이 필요해질 수 있으니, 일단은 넓이와 높이를 모두 저장하도록 하자. 한 클래스에서 다른 클래스의 값을 다이렉트로 수정하는 것은 관심사 분리 원칙이었나...에 의해서 권장되지 않기에 별도로 만들어준다 (이러면 그런데 코틀린의 간결함을 잃는 것 아닌가? 싶기도 하다.) StaticValue.kt class StaticValue { companion object { var widthPixel: Int = 0 var heightPixel: Int = ..
8월 한달 토이 프로젝트를 해보자! -08 : LogIn Data Binding & ViewModel 이제 ViewModel을 만들어, LiveData를 활용하여 Data Binding을 시켜줄 차례다. 시작이 반이라더니, 시작은 역시 그냥 시작인 것 같다. 여전히 한참 남았다. 처음부터 이 아키텍처로 시작했으면 당연히 좀더 빨랐겠지만, 그래도 이왕 만드는 거, 처음부터 차근차근 만들어보는 경험이 스스로에게도 리마인드 하기에 도움이 크게 된다 느껴졌다. app단 build.gradle에 아래와 같이 의존성을 추가해준다. build.gradle(:app) ... def lifecycle_version = "2.6.0-alpha01" def optional_lifecycle_version = "2.5.1" def arch_version = "2.1.0" dependencies { ... // ViewMode..
8월 한달 토이 프로젝트를 해보자! -07 : submenu 이제 ... 을 눌렀을 때 하위 메뉴가 나타나도록 설정해주면 되겠다. FragmentList에서 우선 SubMenu를 만들어줄 것이다. list_sub_menu.xml 이라는 menuItems를 만들어준 다음, FragmentList에 다음과 같이 inflate 해줄 것이다. Fragment에 PopupMenu.OnMenuItemClickListener를 상속해두어 활용해주자. FragmentList.kt private fun showPopUp(v: View) { PopupMenu(requireActivity(), v, Gravity.RIGHT) .apply { setOnMenuItemClickListener(this@ListFragment) inflate(R.menu.list_submenu) show(..
8월 한달 토이 프로젝트를 해보자! -06 : AppBar 이제 툴바를 추가해줄 차례다. ListFragment와 DetailFragment가 사용할 툴바의 기능 및 아이콘 갯수가 다른 만큼, 액티비티에 기본적으로 배치를 하되 각 Fragment에 진입할 때 메뉴의 수정이 필요할 것이다. 우선 resource에 menu를 추가해준다. (리소스 추가하는 방식과 동일하게, menu로 만들겠다고 선택하면 디렉토리는 알아서 설정해준다.) 리스트 메뉴와 디테일 메뉴를 각각 만들었다. list_menu.xml 공식문서에서 setHasOptionsMenu(true)를 설정해주래서 해줬더니 Deprecated 되었다고 뜬다! 아니 공식아!!! 검색을 해보니, 2021.9월에 배포된 Jetpack Version 1.4.0-alpha01에 해당 언급이 있다. 링크는 아래에. ht..
8월 한달 토이 프로젝트를 해보자! -05 : Adapter Click 리스트 ui까지 만들어짐을 확인했으니, 이제 다시 디테일 페이지로 진입하는 부분을 건드릴 차례다. 이때, 클릭 이벤트 생성에 앞서, 디테일 페이지에서는 해당 포스트의 주인, 즉 다이어리를 쓴 본인일 경우 수정이 가능해야 할 것이며, 댓글 작성/삭제 역시 가능해야 할 것이다. 이를 위해서는 디테일 페이지 접속자가 포스트 작성인인가 댓글 작업을 하려는 포스트의 고유값이 무엇인가 위에 대한 최소한의 처리가 필요하다. 이를 위하여 Diary 모델에 val id: String과 val account: String 두 가지 속성을 추가해주었다. account는 로그인 한 계정정보와 비교할 것이고, id는 포스트 등록시 UUID를 생성하여 부여, 댓글 등을 이와 매칭시켜 추후에 조회, 불러올 것이다. 이제 본격적으로..