![](https://velog.velcdn.com/images/jxxn_a/post/27ed12f8-68d7-47d9-81db-c08fdf55023e/image.png)
๐ก Fragment(ํ๋๊ทธ๋จผํธ) ๐ก
Fragment๋?
- Activity ์์์ ๋์ํ๋ ๋ชจ๋ํ๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค
- Activity์ ๋ถ๋ฆฌ๋์ด ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์์
- ์ฌ๋ฌ ๊ฐ์ fragment๋ฅผ ํ๋์ Activity์ ์กฐํฉํ์ฌ ์ฐฝ์ด ์ฌ๋ฌ ๊ฐ์ธ UI๋ฅผ
๊ตฌ์ถํ ์ ์์ผ๋ฉฐ, ํ๋์ fragment๋ฅผ ์ฌ๋ฌ ์กํฐ๋นํฐ์์ ์ฌ์ฌ์ฉํ ์ ์์
๐ซ Activity vs Fragment ๋น๊ต๐ซ
1) Activity
- ์์คํ
์ Activity Manager์์ intent๋ฅผ ํด์ํ ๋ค, Activity๊ฐ์ data๋ฅผ ์ ๋ฌํ๋ค.
2) Fragment
- Activity์ Fragment Manager์์ ๋ฉ์๋๋ก Fragment๊ฐ์ Data๋ฅผ ์ ๋ฌํ๋ค.
๐ก Fragment๋ ์ ์ฌ์ฉํ ๊น? ๐ก
- Fragment๋ก ์ผ๋ถ๋ง ๋ฐ๋๋ ๊ฒ์ด ์์ ์ด์ฉ๋์ด ์ ์ด์ ์๋๊ฐ ๋น ๋ฅด๋ค.
- Fragment๋ฅผ ์ฌ์ฉํ๋ฉด Activity๋ฅผ ์ ๊ฒ ๋ง๋ค ์ ์๋ค.
- Activity์ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์๋ค.
- Fragment๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฌ์ฉ ํ ์์๋ ๋ ์ด์์์ ๋ถ๋ฆฌํด์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- Fragment๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ 1๊ฐ์ Activity์์์ Fragment ๊ณต๊ฐ์ View๋ง ๋ฃ์ผ๋ฉด ์ฌ๋ฌ Activity๋ฅผ ๋ง๋ค์ง ์์๋ ์ฌ๋ฌ ํ๋ฉด์ ๋ณด์ฌ์ค ์์๋ค.
๐ Fragment ์ ์ํ๊ธฐ ๐
- ํ๋์ kotlin ์์ค ํ์ผ๊ณผ ํ๋์ xml ๋ ์ด์์์ผ๋ก ์ ์ํ๋ค.
- Fragment๋ฅผ ์์ฑํ๋ ค๋ฉด Fragment์ ์๋ธํด๋์ค๋ฅผ ์์ฑํ๋ค.
- Fragment์ ๋ ์ด์์์ ์ ๊ณตํ๋ ค๊ณ ํ๋ค๋ฉด onCreateView() ์ฝ๋ฐฑ ๋ฉ์๋๋ฅผ ๊ตฌํํด์ผํ๋ค.
๐ Fragment๋ฅผ Activity์ layout์ ์ ์ ์ถ๊ฐํ๊ธฐ ๐
- ๊ฐ Fragment์๋ Activity๊ฐ ์ฌ์์๋๋ ๊ฒฝ์ฐ Fragment๋ฅผ ๋ณต๊ตฌํ๊ธฐ ์ํด ์์คํ
์ด ์ฌ์ฉํ ์ ์๋ ๊ณ ์ ํ ์๋ณ์๊ฐ ํ์ํ๋ค.
- Fragment์ ID๋ฅผ ์ ๊ณตํ ์ ์๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง๊ฐ ์๋ค.
1) ๊ณ ์ ํ ID์ ํจ๊ป android:id ์์ฑ์ ์ ๊ณตํ๋ค.
2) ๊ณ ์ ํ ๋ฌธ์์ด๊ณผ ํจ๊ป android:tag ์์ฑ์ ์ ๊ณตํ๋ค.
3) ์์คํ
์ container view์ ID๋ฅผ ์ฌ์ฉํ๋ค.
< ์์ ์ฝ๋ >
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="์๋
!!" />
<fragment
android:name="com.skmns.fragmentbasic.FirstFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragment" />
</LinearLayout>
๐ Kotlin ์ฝ๋์์ ๋์ ์ผ๋ก Fragment ์ถ๊ฐํ๊ธฐ ๐
- supportFragmentManager
: ์ฌ์ฉ์ ์ํธ์์ฉ์ ์๋ตํด์ฃผ๋ Fragment๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ๋ ๋ฑ ์์
์ ํ ์์๊ฒ ํด์ฃผ๋ ๋งค๋์
- replace
: ์ด๋ ๋ ์ด์์์ ๋์ธ ๊ฑด์ง, ์ด๋ค Fragment์ธ์ง
- setReorderingAllowed
: ์ ๋๋ฉ์ด์
๊ณผ ์ ํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ก ํธ๋์ญ์
๊ณผ ๊ด๋ จ๋ Fragment์ ์ํ ๋ณ๊ฒฝ์ ์ต์ ํํ๋ค.
( ํธ๋์ญ์
: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ํด์ ์ํํ๋ ์์
์ ๋จ์์ด๋ค. )
- addToBackStack
: ๋ค๋ก๊ฐ๊ธฐ ๋ฒํผ ํด๋ฆญ ์ ๋ค์ action์ผ๋ก ๋์ด๊ฐ๋ค.
โป Fragment์ ์๋ช
์ฃผ๊ธฐ โป
![](https://velog.velcdn.com/images/jxxn_a/post/2f3924f9-ed01-4110-8ec9-38404baba170/image.png)
ํ์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋
1) onCreate()
- fragment๋ฅผ ์์ฑํ ๋ ํธ์ถํ๋ค.
- fragment๊ฐ ์ผ์์ ์ง or ๋ฉ์ถ ํ ์ฌ๊ฐ๋ ๋ ์ ์งํ๊ณ ์๋ ๊ฒ์ ์ด ๋ถ๋ถ์์ ์ด๊ธฐํํด์ผํ๋ค.
2) onCreateView()
- fragment๊ฐ ์๊ธฐ์ interface๋ฅผ ์ฒ์ ๊ทธ๋ฆฌ๊ธฐ ์ํด์ ํธ์ถํ๋ค.
- fragment์ layout ๋ฃจํธ์ด๊ธฐ ๋๋ฌธ์ View(UI)๋ฅผ ๋ฐํํด์ผํ๋๋ฐ UI๊ฐ ์๋ค๋ฉด null์ ๋ฐํํ๋ฉด ๋๋ค.
3) onPause()
- ์ฌ์ฉ์๊ฐ fragment๋ฅผ ๋ ๋๋ฉด ์ฒซ ๋ฒ์งธ๋ก ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ์ฌ์ฉ์๊ฐ ๋์์ค์ง ์์ ์๋ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์ ํ์ฌ ์ฌ์ฉ์ ์ธ์
์ ๋์ด ์ง์๋์ด์ผํ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ ์ฅํ๋ค.
Activity ์๋ช
์ฃผ๊ธฐ์ ๊ฐ์ ๋ฉ์๋
4) onStart()
- activity๊ฐ ์์๋๋ฉด ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
- ์ฌ์ฉ์์๊ฒ fragment๊ฐ ๋ณด์ด๊ฒ ๋๊ณ , ์ด ๋ฉ์๋์์ UI๋ฅผ ๊ด๋ฆฌํ๋ ์ฝ๋๋ฅผ ์ด๊ธฐํํ๋ค.
- ์ด ๋ฉ์๋๋ ๋น ๋ฅด๊ฒ ์๋ฃ๋๊ณ , ์๋ฃ๋๋ฉด onResume() ๋ฉ์๋๋ฅด ํธ์ถํ๋ค.
5) onResume()
- ์ด ์ํ๊ฐ ๋๋ฉด ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ค.
- ์ด๋ค ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ฌ ํฌ์ปค์ค๊ฐ ๋ ๋ ๋๊น์ง ์ด ์ํ์ ๋ค์ ๋จธ๋ฌด๋ฅธ๋ค.
- ํ๋ก๊ทธ๋จ์ด ์ผ์์ ์ง๋์ด onPause()๋ฅผ ํธ์ถํ๊ณ ๋ค์ ์ฌ๊ฐ๋๋ฉด onResume() ๋ฉ์๋๋ฅผ ๋ค์ ํธ์ถํ๋ค.
- ์ฌ๊ฐ ์ํ๋ก ์ ํ ๋ ๋๋ง๋ค ํ์ํ ์ด๊ธฐํ ์์
๋ค์ ์ํํด์ผํ๋ค.
6) onStop()
- ๋ค๋ฅธ activity๊ฐ ํ๋ฉด์ ์์ ํ ๊ฐ๋ฆฌ๊ฒ ๋๋ฉด ํธ์ถ๋๋ค.
- ํ๋ฉด์ด ๋ณด์ด์ง ์์ ๋ ์คํํ ํ์๊ฐ ์๋ ๊ธฐ๋ฅ์ ๋ชจ๋ ์ ์ง ์ํฌ ์ ์๋ค.
- ์ฑ์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ด์ง ์๋ ๋์ ์ฑ์ ํ์ํ์ง ์๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๊ฑฐ๋ ์กฐ์ ํด์ผํ๋ค.
- onPause()๋์ onStop()์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์๊ฐ ๋ฉํฐ ์๋์ฐ ๋ชจ๋์์ activity๋ฅผ ๋ณด๊ณ ์๋๋ผ๋ UI ๊ด๋ จ ์์
์ด ๊ณ์ ์งํ๋๋ค.
- activity ๋๋ fragment๊ฐ ์ ์ง๋๋ฉด ์์คํ
์ด onSaveInstanceState()๋ฅผ ํธ์ถํ์ฌ ๊ฐ๋จํ๊ณ ๊ฐ๋ฒผ์ด UI์ํ๋ฅผ ์ ์ฅํ๋ฉฐ, ์ฌ์ ์ํด์ ์ฌ์ฉํ ์์๋ค.
Activity ์๋ช
์ฃผ๊ธฐ์ Fragment์ ์๋ช
์ฃผ๊ธฐ์ ์ค์ํ ์ฐจ์ด์
7) addToBackStack()
- Activity๋ ์ ์ง๋๋ฉด ์์คํ
์์ ๊ด๋ฆฌํ๋ Activity์ BackStack()์ ๋ค์ด๊ฐ๋ค.
- Fragment๋ ์ ์ง๋๋ฉด ์ด๋ฅผ ์ ๊ฑฐํ๋ ํธ๋์ญ์
์์ addToBackStack()์ ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ผ๊ณ ๋ช
์์ ์ผ๋ก ์์ฒญํ ๊ฒฝ์ฐ์๋ง Activity์์ ๊ด๋ฆฌํ๋ BackStack()์ผ๋ก ๋ค์ด๊ฐ๋ค.
[ ์๋ช
์ฃผ๊ธฐ ๋ง์ง๋ง ]
8) onDestroy()
- Activity ๋๋ Fragment๊ฐ ์๋ฉธ๋๊ธฐ ์ ์ ํธ์ถ๋๋ค.
- ์ฌ์ฉ์๊ฐ Activity๋ฅผ ์์ ํ ๋ซ๊ฑฐ๋ ๊ตฌ์ฑ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์์คํ
์ด ์ผ์์ ์ผ๋ก ์๋ฉธ๋๋ ๊ฒฝ์ฐ์๋ ํธ์ถ๋๋ค.
- ์์ ๊ฐ์ ๊ฒฝ์ฐ์๋ ์ฝ๋ฐฑ ๋ฉ์๋(onStop()๋ฑ)์์ ํด์ ๋์ง ์์ ๋ฆฌ์์ค๋ค์ ํด์ ํด์ผํ๋ค.
[Fragment ์๋ช
์ฃผ๊ธฐ ์ฐธ๊ณ ๋ธ๋ก๊ทธ]
https://ddangeun.tistory.com/50
๊ธ์ ๋ณด๊ณ ๋๋ผ์ ์ด???! ๋ผ๊ณ ํ๋ฉด์ ์ ๋.....๋ผ๊ณ ํ๊ฒ๋์์ต๋๋ค......
์ด๋ ต๋ค์.....ใ ใ กใ