일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Coroutines
- 코드포스
- AWS
- ProGuard
- Gradle
- android
- activity
- boj
- Hilt
- relay
- textfield
- architecture
- Coroutine
- 암호학
- livedata
- Kotlin
- 코루틴
- GitHub
- MyVoca
- Codeforces
- 백준
- 쿠링
- Python
- androidStudio
- Compose
- Rxjava
- MiTweet
- pandas
- 프로그래머스
- TEST
- Today
- Total
이동식 저장소
Inflate()에서 매개변수 attachToParent의 의미 본문
중요: 커스텀 뷰가 안 보이면 ``attachToParent``를 ``true``로 설정해 보자.
``ViewBinding``의 ``inflate()`` 메소드는 세 개의 매개변수를 받는다.
- ``inflater``: ``LayoutInflater``
- ``parent``: 뷰를 붙일 ``ViewGroup``. 사용하는 뷰(액티비티, 프래그먼트, 커스텀 뷰 등)에 따라 다른 값을 사용한다.
- ``attachToParent``: ``Boolean`` 값.
이 글에서 살펴볼 매개변수는 ``attachToParent``이다. 사실 마이트윗에서 ``ViewBinding``으로 바꾸고 나니 어떤 뷰가 계속 안 보이길래 2시간 동안 삽질했는데, ``attachToParent``를 ``false``에서 ``true``로 바꾸기만 하면 되었다.
그래서 한번 탐구해 보았다. 도대체 ``attachToParent``는 무엇인가?
시점의 차이
``attachToParent``가 ``true``이면 현재 뷰를 ``parent``에 즉시 추가한다. ``false``이면 ``parent``에 나중에 추가한다. 나중에라는 말은 ``parent.addView(childView)`` 등 현재 뷰를 ``parent``에 붙이는 모든 코드를 의미한다. 즉 ``attachToParent``가 ``false``일지라도 나중에 뷰를 붙이는 코드를 실행하면 뷰가 ``parent``에 붙여지게 된다.
예를 들어 프래그먼트에서 ``ViewBinding``을 사용할 때는 ``attachToParent``가 ``false``여야 한다. 왜냐하면 일반적인 구현에서는 ``FragmentManager``가 프래그먼트를 자동으로 ``add()``하기 때문이다. 만약 ``true``로 설정했다면, ``inflate()``에서 이미 추가된 프래그먼트를 ``FragmentManager``가 중복해서 붙이려고 하는 상황이 되기 때문에 ``IllegalStateException``이 발생한다. 따라서 내가 직접 뷰를 붙여야 한다는 확신이 없으면 ``attachToParent``를 ``true``로 해서는 안 된다.
결론
웬만하면 ``attachToParent``는 ``false``로 하는 게 좋은 듯 하다. 가끔 뷰가 갑자기 보이지 않는다던가 하는 문제가 있을 때만 ``true``로 놓고 테스트해 보자.
참고: android - What does the LayoutInflater attachToRoot parameter mean? - Stack Overflow
'Primary > Android' 카테고리의 다른 글
[Android Kotlin Fundamentals] Lifecycle (2) | 2021.02.03 |
---|---|
[Android Kotlin Fundamentals] Navigation path (0) | 2021.02.02 |
ViewBinding 사용 시 레이아웃 크기가 wrap_content로 고정되는 문제 (0) | 2020.12.21 |
ViewBinding을 사용할 때 layout_margin이 적용되지 않는 오류 (0) | 2020.12.13 |
Android Studio에서 머티리얼 아이콘 쉽게 사용하기 (0) | 2020.08.27 |