โญ๋ทฐ ๋ฐ์ธ๋ฉ: ์๋๋ก์ด๋ ์ํคํ ์ณ ๊ตฌ์ฑ์์๋ก์ ์ฑ ๋ชจ๋๋ณ๋ก ์ค์ ํ์ฌ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ!
โญ๋ทฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ๋ฉด ๋ทฐ์ ์ํธ์์ฉํ๋ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋ค.
-ํน์ง:
๐ซ ๋ ์ด์์ xml ํ์ผ๊ณผ ์ฐ๊ฒฐ๋๋ ๋ฐ์ธ๋ฉ ํด๋์ค๊ฐ ์๋์ผ๋ก ์ค๊ณ๋์ด ๋ง๋ค์ด์ง๋ค.
๐ซ ํด๋์ค์ ๋ฉค๋ฒ๋ก์ ๋ ์ด์์ xml์ ID๊ฐ ์๋ ๋ชจ๋ ๋ทฐ๋ฅผ ์ฐธ์กฐํ๋ ์ฐธ์กฐ๋ณ์๊ฐ ํฌํจ๋์ด ์๋ค.
=> ๋ณ๋๋ก findViewByID()๋ฅผ ํ์ง ์์๋, ์ด ๋ฐ์ธ๋ฉ ํด๋์ค์ ๊ฐ์ฒด(์ธ์คํด์ค)์์ ๋ชจ๋ ๋ทฐ๋ค์ ์ฐธ์กฐ๋ณ์๊ฐ ๋ง๋ค์ด์ ธ ์์!
๐ซ ๋ทฐ ๋ฐ์ธ๋ฉ ๊ธฐ๋ฅ์ผ๋ก ๋ ์ด์์ xmlํ์ผ๊ณผ ์ฐ๊ฒฐ๋๋ ๋ฐ์ธ๋ฉ ํด๋์ค๋ ์๋์ผ๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์, ์ด๋ฆ์ด ํน์ ํ ๊ท์น์ ๋ง๊ฒ ๋ง๋ค์ด์ง๋ค.
=> ๋ฑ ๋ด๋ ์ด๋ค xml๊ณผ ์ฐ๊ฒฐ๋์๋์ง ์ ์ ์์
ex) ์กํฐ๋นํฐ ๋ ์ด์์ ํ์ผ๋ช
๊ณผ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ ๋ฐ์ธ๋ฉ ํด๋์ค๋ช
activity_main.xml => ActivityMainBinding
ex) ํ๋๊ทธ๋จผํธ ๋ ์ด์์ ํ์ผ๋ช
๊ณผ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ ๋ฐ์ธ๋ฉ ํด๋์ค๋ช
fragment_login.xml => FragmentLoginBinding
ex) ๋ฆฌ์ฌ์ดํด๋ฌ๋ทฐ์ ์์ดํ
1๊ฐ์ ๋ ์ด์์ ํ์ผ๋ช
๊ณผ ์๋์ผ๋ก ๋ง๋ค์ด์ง๋ ์ด์ฉ๊ณ
recycler_item.xml => RecyclerItemBinding
<์ฐธ๊ณ >
setContentView ์์ ์๋ R.layout.activity_main
=>R: ์๋๋ก์ด๋ ํ๋ก์ ํธ(์ฑ)์์ ๋ทฐ๋ฅผ ๊ด๋ฆฌํ๋ ํ์ผ
1. Gradle ์ถ๊ฐ
build.gradle(Module)์ ๋ค์ด๊ฐ android ํด๋์ค ์๋์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ ๋ทฐ ๋ฐ์ธ๋ฉ ์ค์ !
์ค๋ฅธ์ชฝ ์๋จ์ Sync Now!
2. MainActivity์์ ๋ทฐ ๋ฐ์ธ๋ฉ ์ฌ์ฉ
MainActivity๋ก ๋์๊ฐ ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
-inflate: xml์ ์๋ ๋ทฐ๋ฅผ ๊ฐ์ฒดํํด์ค
3. TextView๋ฅผ ๋ง๋ ๋ค
id๋ ๋ถ์ฌํด์ค๋ค. id๋ ์๊ฒน์น๊ฒ, ์ฉ๋๋ฅผ ์ ์ ์๊ฒ ์ง๋๋ค.
4. MainActivity์์ text ๋ด์ฉ์ ๋ณ๊ฒฝํด๋ณธ๋ค
viewBinding.tvText.text = "์๋
์ธ์์"
์ ๋ฐ์๋์๋ค!
5. ๊ฒฐํฉํ ๋๋ค๋ฅธ ์กํฐ๋นํฐ๋ฅผ ๋ง๋ค๊ณ , 2๋ฒ๊ณผ ๋์ผํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
SecondActivity
6. activity_main.xml์ ๋ฒํผ์ ๋ง๋ค์ด๋ณด์~
Palette์์ Button ๋๋๊ทธํด์ ํ๋ฉด์ ๊ฐ์ ธ์ค๋ฉด Button์ด ์๊ธด๋ค...
์ฒ์ ์์๋ค!
ConstraintLayout์ ์ฌ์ฉํ๊ณ ์์ผ๋๊น, ์๋๊ฐ๋ค์ ์ค์ ํด์ฃผ์ด์ผ ํ๋ค.
์ฌ๊ธด MainActivity ์ด๋ค!
7. ViewBinding์ ์ฌ์ฉํด์, OnClickListener()๋ฅผ ์ค์ ํด์ค๋ค.
//OnClickListener: ํด๋ฆญ ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ฌ์ ๋ ๋์!
ํ์ธ์ ์ํด SecondActivity์ ๋๋ฒ์งธ ๋ฒํผ๋ ๋ง๋ค์ด ์ค๋ค!
=> Button์ ๋๋ฅด๋ฉด ํ๋ฉด์ 2๊ฐ ๋์ค๊ฒ ํด๋ณด์~
๋ฒํผ์ ๋๋ฅด๋ฉด
์ง์~
8. Fragment 2๊ฐ๋ฅผ ๋ง๋ค์ด๋ณด์
๋ ์ด์์ ๋ฆฌ์์ค ํ์ผ์ ํ๋ ๋ง๋ค์ด์ค๋ค.
TextView๋ฅผ ํ๋ ์์ฑํ๋ค.
๋๋ฒ์งธ ๋ ์ด์์๋ ๋๊ฐ์ด ๋ง๋ค์ด์ค๋ค!
ํท๊ฐ๋ฆฌ๋๊น TextView ์์ Text๋ฅผ First, Second๋ก ๊ตฌ๋ถํ๋ค
9. Fragment Class๋ฅผ ๋ง๋ ๋ค.
ํด๋์ค ์์ฑ ํ ์ด๋ฆ์ FirstFragment
๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ฌ Fragment๋ฅผ ์์๋ฐ๋๋ค.
Activity๋ OnCreate๋ฅผ ์ฌ์ฉํ์ง๋ง, Fragment๋ OnCreateView๋ฅผ ์ฌ์ฉํ๋ค.
OnCreateView์ ๋ฆฌํด๊ฐ์ผ๋ก ViewBinding์ ์ค๋ค..
(Avtivity๋
setContentView(viewBinding.root)
์๋ ๊ฒ ์คฌ์๋ค)
SecondFragment๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ง๋ ๋ค!
10. Fragment๋ฅผ ๋์ธ ์๋ฆฌ๋ฅผ Activity์์ ๋ง๋ค์ด์ค๋ค.
activity_main.xml => ๋์์ธ ํ๋ ํธ์์ Layouts - FrameLayout ๋๋๊ทธํด์ ์์ฑ!
1) ์, ์ค, ์ผ์ชฝ์ ๋ถ๋ชจ์ ๊ฑธ์ด์ค๋น
2) ๋์ด, ๋๋น 0dp
11. LinearLayout์ ConstraintLayout์์ ํ๋ ๋ง๋ ๋ค.
์ค์ ๊ฐ๋ ์ฐธ๊ณ ์ฐธ๊ณ !!!
FrameLayout์ LinearLayout ์์ ๊ฑธ์ด์ค๋ค
=> ํ๋ฉด ์ ์ฒด ์ฐจ์งํ๊ฒ ๋๋ค!
LinearLayout ์๋์ ๋ฒํผ ๋๊ฐ๋ฅผ ๋ง๋ค์ด์ค๋ค!
LinearLayout Botton ์ค์ ์ด parent๋ก ์๋์ด ์์ด์ ํด์ค์
+FragmentLayout์ id์ค๋ค.
android:id="@+id/frame_fragment"
12. Button ์ค์
๋ฒํผ1์ ๋๋ฅด๋ฉด Fragment1๋ก, ๋ฒํผ2๋ 2๋ก ๊ฐ๊ฒ ํ ๊ฑฐ๋ค
์ด๋ ๊ฒ ๋๋ฉด ๋ฒํผ 2๊ฐ์ Fragment๊ฐ ๋ค์ด๊ฐ ํ๋ฉด ๊ณต๊ฐ๊น์ง ๋ง๋ค์๋ค!
13. MainActivity์์ ์ค์ ํด์ค๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
//main fragment(๊ธฐ๋ณธํ๋ฉด)
supportFragmentManager
.beginTransaction()
//์ฌ๊ธฐ์ Fragment ๋ณ๊ฒฝ๋๋๊ฒ ์์๋๋ค!
์ฌ๊ธฐ์ ContainerID๋ฅผ ์จ์ค์ผ๋๋๋ฐ, ์ฌ๊ธฐ์ Container๋??
=> Activity์์ ๋ง๋ FrameLayout์ ์๋ฏธํ๋ค.
๋ง์ง๋ง์ผ๋ก
.commitAllowingStateLoss()
//State๊ฐ ๋ ๋ผ๊ฐ๋๊ฑธ ํ์ฉํ๋ค! => ์ค๋ฅ๋ฅผ ๋ฐฉ์งํด์ค๋ค.
14. ๋ฒํผ ์ด๋ฒคํธ๋ฅผ ์ค์ ํ๋ค.
์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ฒํผ์ ๋๋ฅด๋ฉด ํด๋น Fragment๋ก ์ด๋ํ๋ ์กํฐ๋นํฐ๋ฅผ ๋ง๋ ๊ฑฐ๋ค
์คํํด๋ณด๋ฉด ์ฑ๊ณต!