Open choieuihyun opened 9 months ago
์ ์ ์ฌ์ฉํด๋ดค๋ ํ๋ก์ ํธ์์ ์ ๋๊ณ , ๊ทธ๊ฑธ ๊ทธ๋๋ก ์ฌ์ฉํ์๋๋ฐ ๋ฌด์์ด ๋ฌธ์ ์ผ๊น
์๋ฌ๊ฐ ๋ฐ์ํ ๊ณณ์์ ์ ์๋ ๋ถ๋ถ์ ๊ณ์ธต์ ํ๊ณ ๋ค์ด๊ฐ์ ๋ณธ ๊ฒฐ๊ณผ
onNavDestinationSelected ๋ฉ์๋์
if (navController.currentDestination!!.parent!!.findNode(item.itemId))
์ด ๋ถ๋ถ๊ณผ
setupWithNavController ๋ฉ์๋์
navigationBarView.setOnItemSelectedListener { item -> onNavDestinationSelected( item, navController ) }
์ด ๋ถ๋ถ์ด ๋ฌธ์ ๋ค. ์ด ์ธ์๋ ๋ง์ ์๋ฌ ์คํ์ด ๋จ์ง๋ง ์ด ๋ ๊ฐ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ์ด๊ธฐ์ ๊ฐ์ฅ ์ ๋ ฅํด ๋ณด์.
์๋ฌ์ฝ๋ ์๋ฏธ ํด์์ ์ด ์ ๋๊ฐ ๋๊ฒ ์ง๋ง ์ฌ์ค ์ด๊ฒ ์ค์ํ๊ฒ ์๋๋ค. NPE๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ๋ณด์ '์ด๊ฒ ์ด๋์์ ๋ฐ์ํ๋'๊ฐ ์ค์ํ ํฌ์ธํธ์ธ๋ฐ findNode() ๊ฐ ์ ์๋ ๋ถ๋ถ์ ๋ณด์์ ๋ null์ ๋ํด์ ์๋น์ค ์ฐ์ฐ์๋ก ์ฒ๋ฆฌ๊ฐ ๋์ด์์์. ์ด์ ๊ฐ์๊ฒฝ์ฐ๋ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์์ ๊ฒ์. ๊ทธ๋ฌ๋ฉด ๋จ์๊ฒ currentDestination!!.parent!! ์ฌ๊ธฐ ์ด null์ด ์๋๋ผ๊ณ ํธ์ธ์ฅ๋ด ํ๊ณ ์๋ ์ด ๋ถ๋ถ์ด๋ค. ์ฌ๊ธฐ๊ฐ null์ผ ์๊ฐ ์๋๋ฐ ๋ด๊ฐ ๊ตฌํํ ๊ณณ์์๋ null์ด๋ผ NPE๋จ๋ฉด์ ์ข ๋ฃ๊ฐ ๋๋ค๊ณ ์๊ฐ๋๋ค. ๊ทผ๋ฐ ๊ทธ๋๋ ์ ํด๊ฒฐ์ด ์๋์ง ํ ์ ์๋๊ฑฐ ๋ค ํด๋ดค๋๋ฐ? ์ด๋ ๊ฒ ํ์์ ์๋ง ์ฌ์ฉํ๋๊ฒ ์๋๊ณ ์ด์ ์ฐพ๊ธฐ๋ ํ๋ ๊ฒ ์ ์ผ ํ๋๋ค.
ํด๊ฒฐํ๋ค.
์์ ์ ํ๋๊ฑฐ ๊ทธ๋๋ก ๊ฐ๋ค์ฐ๋๊น ๋ฌธ์ ๊ฐ ์๊ธด๊ฑฐ์๋ค.
navController.popBackStack() ์ฌ๊ธฐ๊ฐ ๋ฌธ์ ์ธ๊ฑธ ๊ทธ๋ฅ ์ ๊ฒฝ๋ ๋ชป์ผ๋ค.
ํ๋๊ทธ๋จผํธ๊ฐ ๋ฐฑ์คํ์ ์์ธ๋ค๋ ๊ฐ๋ ์ ์๊ณ ์์๋๋ฐ ์ฑ์ ๊ตฌ์กฐ์ ๋ฐ๋ผ์๋ ์ ์ฉ๋ ์๋ ์์์ง๋ง
์ด๋ฒ ์ฑ์ ๊ตฌ์กฐ๋ ์ ์ด์ ์์์ ์ ์ฐจ์ด๋ก ์ธํด ํ๋ฉด์ด ์ ํ๋ ๋ ํ์ฌ ๋ฐฑ์คํ์ ํ๋๋ฐ์ ์๋๋ฐ popbackstack()์ผ๋ก ํ๋ฉด ์ ํํ๋ฉด์
์์ ๋ฒ๋ฆด๋ผ๊ณ ํ๋๊น stack ์์ฒด๊ฐ ๋น์ด๋ฒ๋ ค null์ด ๋์ด ๊ทธ๋ฐ ๊ฒ ๊ฐ๋ค.(popbackstack() ์ ์ ํ์ธํด๋ด)
๐ ๊ฐ๋ฐ ์ด์
bottomNavigation์ ์์ดํ ์ ๋๋ฌ ํ๋ฉด์ ์ด๋ํ๋ ค๊ณ ํ๋ฉด java.lang.NullPointerException ์๋ฌ๊ฐ ๋ฐ์
๐ค ํด๊ฒฐ ๋ฐฉ์ ๊ณ ์
๋ฌธ์ ์ ์์ธ์ด ๋ช ๊ฐ์ง ์์ ์ ์๋ค๊ณ ํ๋ค.
NavController ์ด๊ธฐํ ๋ฌธ์
๋ฆฌ์์ค ID ๋ถ์ผ์น : BottomNavigation์ ๋ฉ๋ด item Id์ NavController์ Navigation Graph์ ์ ์๋ ๋ชฉ์ ์ง ๊ฐ์ ID ์ผ์น
๋ญ ์ด ์ธ์๋ ์๋๋ฐ ๋ด๊ฐ ์ฌ๋ฌ๋ฒ ๊น๋จน๊ธฐ๋ ํ๊ณ ๋ค๋ฅธ ์ฌ๋๋ค๋ ๋ง์ด ์ค์ํ๋ 2๋ฒ. ์ด๊ฒ ๊ฑฐ์ ๋ฌธ์ ๊ฐ๋ค.