질문(예시)
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 함수의 유무를 설명드렸습니다.