[UMC] 3์ฃผ์ฐจ๐Ÿ’ป - ViewBinding

Madeline๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ปยท2022๋…„ 10์›” 8์ผ
0

kotlin study

๋ชฉ๋ก ๋ณด๊ธฐ
5/19

1. ๋ทฐ ๋ฐ”์ธ๋”ฉ

โญ•๋ทฐ ๋ฐ”์ธ๋”ฉ: ์•ˆ๋“œ๋กœ์ด๋“œ ์•„ํ‚คํ…์ณ ๊ตฌ์„ฑ์š”์†Œ๋กœ์„œ ์•ฑ ๋ชจ๋“ˆ๋ณ„๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ!

โญ•๋ทฐ ๋ฐ”์ธ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ทฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

-ํŠน์ง•:

๐Ÿ›ซ ๋ ˆ์ด์•„์›ƒ xml ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๊ฐ€ ์ž๋™์œผ๋กœ ์„ค๊ณ„๋˜์–ด ๋งŒ๋“ค์–ด์ง„๋‹ค.

๐Ÿ›ซ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ์„œ ๋ ˆ์ด์•„์›ƒ xml์— ID๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ๋ทฐ๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

=> ๋ณ„๋„๋กœ findViewByID()๋ฅผ ํ•˜์ง€ ์•Š์•„๋„, ์ด ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)์•ˆ์— ๋ชจ๋“  ๋ทฐ๋“ค์˜ ์ฐธ์กฐ๋ณ€์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ์Œ!

๐Ÿ›ซ ๋ทฐ ๋ฐ”์ธ๋”ฉ ๊ธฐ๋Šฅ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ xmlํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜๋Š” ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๋Š” ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ์ด๋ฆ„์ด ํŠน์ •ํ•œ ๊ทœ์น™์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด์ง„๋‹ค.
=> ๋”ฑ ๋ด๋„ ์–ด๋–ค xml๊ณผ ์—ฐ๊ฒฐ๋˜์—ˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Œ

ex) ์•กํ‹ฐ๋น„ํ‹ฐ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ๋ช…๊ณผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๋ช…
activity_main.xml => ActivityMainBinding

ex) ํ”„๋ž˜๊ทธ๋จผํŠธ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ๋ช…๊ณผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ฐ”์ธ๋”ฉ ํด๋ž˜์Šค๋ช…
fragment_login.xml => FragmentLoginBinding

ex) ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ์˜ ์•„์ดํ…œ 1๊ฐœ์™€ ๋ ˆ์ด์•„์›ƒ ํŒŒ์ผ๋ช…๊ณผ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์–ด์ฉŒ๊ณ 
recycler_item.xml => RecyclerItemBinding

2. ์‹ค์Šตํ•ด๋ณด์ž๐Ÿš—

<์ฐธ๊ณ >

setContentView ์•ˆ์— ์žˆ๋Š” R.layout.activity_main
=>R: ์•ˆ๋“œ๋กœ์ด๋“œ ํ”„๋กœ์ ํŠธ(์•ฑ)์—์„œ ๋ทฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ํŒŒ์ผ

1. ViewBinding

1. Gradle ์ถ”๊ฐ€

build.gradle(Module)์— ๋“ค์–ด๊ฐ€ android ํด๋ž˜์Šค ์•„๋ž˜์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ๋ทฐ ๋ฐ”์ธ๋”ฉ ์„ค์ •!

์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— Sync Now!

2. MainActivity์—์„œ ๋ทฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ

MainActivity๋กœ ๋Œ์•„๊ฐ€ ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

  • R.layout.activity~ => ์ƒ์„ฑํ•œ ๋ฃจํŠธ ๋ทฐ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค!

-inflate: xml์— ์žˆ๋Š” ๋ทฐ๋ฅผ ๊ฐ์ฒดํ™”ํ•ด์คŒ

3. TextView๋ฅผ ๋งŒ๋“ ๋‹ค

id๋„ ๋ถ€์—ฌํ•ด์ค€๋‹ค. id๋Š” ์•ˆ๊ฒน์น˜๊ฒŒ, ์šฉ๋„๋ฅผ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ง“๋Š”๋‹ค.

4. MainActivity์—์„œ text ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•ด๋ณธ๋‹ค

 viewBinding.tvText.text = "์•ˆ๋…• ์„ธ์ƒ์•„"

์ž˜ ๋ฐ˜์˜๋˜์—ˆ๋‹ค!

2. Activity -> Activity

5. ๊ฒฐํ•ฉํ•  ๋˜๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋งŒ๋“ค๊ณ , 2๋ฒˆ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

SecondActivity

  • Manifest ํŒŒ์ผ์— ์ž˜ ๋ฐ˜์˜์ด ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ!

    ์œ„์™€ ๊ฐ™์ด SecondActivity๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ๋œ๊ฑฐ๊ณ , ์•ˆ๋ผ์žˆ์œผ๋ฉด ๊ผญ ํ•ด์ค˜์•ผํ•จ
    => Manifest์— Activity ์ •๋ณด๊ฐ€ ์—†๋‹ค๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค!

6. activity_main.xml์— ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด๋ณด์ž~

Palette์—์„œ Button ๋“œ๋ž˜๊ทธํ•ด์„œ ํ™”๋ฉด์— ๊ฐ€์ ธ์˜ค๋ฉด Button์ด ์ƒ๊ธด๋‹ค...
์ฒ˜์Œ ์•Œ์•˜๋‹ค!

ConstraintLayout์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‹ˆ๊นŒ, ์ƒ๋Œ€๊ฐ’๋“ค์„ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์—ฌ๊ธด MainActivity ์ด๋‹ค!

7. ViewBinding์„ ์‚ฌ์šฉํ•ด์„œ, OnClickListener()๋ฅผ ์„ค์ •ํ•ด์ค€๋‹ค.

//OnClickListener: ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ ๋™์ž‘!

ํ™•์ธ์„ ์œ„ํ•ด SecondActivity์— ๋‘๋ฒˆ์งธ ๋ฒ„ํŠผ๋„ ๋งŒ๋“ค์–ด ์ค€๋‹ค!

=> Button์„ ๋ˆ„๋ฅด๋ฉด ํ™”๋ฉด์— 2๊ฐ€ ๋‚˜์˜ค๊ฒŒ ํ•ด๋ณด์ž~

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด

์งœ์ž”~

3. Fragment

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๋กœ ์ด๋™ํ•˜๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋งŒ๋“ ๊ฑฐ๋‹ค

์‹คํ–‰ํ•ด๋ณด๋ฉด ์„ฑ๊ณต!

profile
Major interest in iOS ๐Ÿ€ & ๐ŸŽ

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