Kotlin TIL(21) [Fragment]

jxxn_aยท2023๋…„ 9์›” 13์ผ
2

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
21/27

๐Ÿ’ก 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์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ โ™ป

ํ•„์ˆ˜ ์ƒ๋ช… ์ฃผ๊ธฐ ๋ฉ”์„œ๋“œ

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

4๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2023๋…„ 9์›” 13์ผ

๊ธ€์„ ๋ณด๊ณ  ๋†€๋ผ์„œ ์–ด???! ๋ผ๊ณ  ํ•˜๋ฉด์„œ ์ €๋„.....๋ผ๊ณ  ํ•˜๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค......
์–ด๋ ต๋„ค์š”.....ใ…œใ…กใ…œ

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2023๋…„ 9์›” 14์ผ

์˜ค fragment life cycle๊นŒ์ง€........๐Ÿ‘๐Ÿ‘๐Ÿ‘๐Ÿ‘๐Ÿ‘ ์ข‹์•„์š” ๋ˆ„๋ฅด๊ณ  ๊ฐ‘๋‹ˆ๋‹ค!!

1๊ฐœ์˜ ๋‹ต๊ธ€