Search

김승완 멘토링 신청

분류
안드로이드
담당멘토
양민욱
멘토링 요청시간
2023/08/21 20:00-21:00
멘토링 시간
2023/08/21 20:00-21:50
멘토링방
멘토링룸1
배정상태
해결완료
비용지급
시트 반영
번호
0
신청팀
개인
소요시간
0
작성자
김승완

질문(예시)

1.
navigation drawer에서 전체적으로 질문이 있습니다..
navigation drawer 이랑 bottom navigation 이랑 toolbar를 이용하려하는데 drawer가 계속 켜져있어서 이 부분에 대해서 막힌 상태입니다

멘토답변

멘티분의 화면과 작업해주신 파일을 같이 보면서 문제를 같이 해결해 나갔습니다.
Fragment에서 DrawerLayout 연결 이슈
만들려고 하는 앱 UI가 특정 Fragment에서는 AppBar가 존재하고, 특정 Fragment에는 없어야 해서 Activity가 아닌 Fragment 내에 DrawerLayout을 연결하고 있으셨습니다.
Fragment로 DrawerLayout을 연결 시도는 결국 실패했는데요. 공식 문서, 관련 자료들 모두 Activity에서 DrawerLayout을 연결하는 자료 뿐이어서 불가능이라 판단하고 방향을 변경했습니다.
Activity에서 DrawerLayout을 선언해서 관리해주도록 변경했습니다.
Fragment에서 특정 화면으로 이동하고 돌아오면 뷰 이상 동작 확인
DataBinding을 ViewLifecycle마다 초기화 해주는 것이 아닌 하나의 인스턴스를 재활용하고 있어서 onCreateView의 뷰 초기화가 중복으로 설정되는 것이 문제였습니다.
val _binding by lazy { FragmentHomeBinding.inflat(...) }
Kotlin
복사
지난 멘토링에서 배운 by lazy 공부 목적으로 사용해보려고 하셨다는 점은 좋았지만, Fragment의 binding 객체에서는 맞지 않는 예제라는 것을 설명드리며 아래처럼 변경해 이슈를 수정했습니다.
var _binding: FragmentHomeBinding? = null override fun onCreateView(...) { _binding = FragmemtHomeBinding.inflate(...) return _binding.root } override fun onDestryView() { _binding = null }
Kotlin
복사
Activity 뷰 리스너 동작 안하는 이슈 발견
올바르게 등록한 뷰 리스너가 동작하지 않는 현상을 발견하고 Android Debugger 사용 방법을 실시간으로 알려드렸습니다.
val binding by lazy { ActivityMainBinding.inflat(...) } override fun onCreate(...) { setContentView(ActivityMainBinding.inflat(...)) <- 또 다른 뷰 inflate }
Kotlin
복사
이유는 Activity의 binding 객체를 setContentView에 root 뷰로 사용하지 않는 이슈임을 발견해 수정했습니다.
val binding by lazy { ActivityMainBinding.inflat(...) } override fun onCreate(...) { setContentView(binding.root) }
Kotlin
복사
Activity에서 DrawerLayout 연결 안되는 이슈 수정
ActionBar 없이 Navigation UI로 연결이 안됨을 확인하고 직접 Navigation 관리를 해주도록 구조를 수정했습니다.
navController.navigate 함수에 popup inclusive 함수의 유무를 설명드렸습니다.