[UMC] 3์ฃผ์ฐจ๐Ÿ’ป - Fragment, Intent

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

kotlin study

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

Activity

- Activity

โญ• Activity์˜ ์ •์˜

  • Activityย ํด๋ž˜์Šค๋Š” Android ์•ฑ์˜ ์ค‘์š”ํ•œ component.
  • ํ™œ๋™์ด ์‹คํ–‰๋˜๊ณ  ๊ฒฐํ•ฉ๋˜๋Š” ๋ฐฉ์‹์€ ํ”Œ๋žซํผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋ธ์˜ ๊ธฐ๋ณธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.
    โญ• ์ƒˆ Activity๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
  • Android ์‹œ์Šคํ…œ์€ ์ƒ๋ช… ์ฃผ๊ธฐ์˜ ํŠน์ • ๋‹จ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ํŠน์ • ์ฝœ๋ฐฑ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌย Activityย ์ธ์Šคํ„ด์Šค์˜ ์ฝ”๋“œ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

- Activity์™€ Layout์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

โญ• findViewById์˜ ์›๋ฆฌ ๋ฐ ์‚ฌ์šฉ๋ฒ•
โญ• ViewBinding์˜ ์›๋ฆฌ ์‚ฌ์šฉ๋ฒ•

  • build.gradle์— viewBinding ์„ ์–ธ
viewBinding{
enabled true
}

โญ• findViewById๋ณด๋‹ค ViewBinding์ด ๊ถŒ์žฅ๋˜๋Š” ์ด์œ 

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค 3.6 ์ด์ƒ ๋ฒ„์ „์—์„œ ๋ถ€ํ„ฐ ๋‚˜์˜จย XML ๋ทฐ์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์œ„ํ•œ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ findViewById์—์„œย ์•ˆ์ •์„ฑ์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • View์˜ ๊ฐœ์ˆ˜๋Œ€๋กœ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • Null safetyํ•˜๋‹ค.
  • ์ƒˆ๋กœ์šด Activity๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•

- Intent

โญ• Intent์˜ ์ •์˜

  • ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ์Šคํ…œ์— ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์‹œ์ง€
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปดํฌ๋„ŒํŠธ ๊ฐ„์— ์ž‘์—… ์ˆ˜ํ–‰์„ ์œ„ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

โญ• ๋ช…์‹œ์  Intent์™€ ์•”์‹œ์  Intent์˜ ์ฐจ์ด

    val intent: Intent = Intent(this, DetailActivity::class.java)
    startActivity(intent)
    //startActivity() ํ•จ์ˆ˜๊ฐ€ ์ธํ…ํŠธ๋ฅผ ์‹œ์Šคํ…œ์— ์ „๋‹ฌ!
        
    => DetailActivity ์˜ ์ •๋ณด๋ฅผ Intent ๊ฐ์ฒด์— ๋Œ€์ž…ํ•œ ๊ฒƒ

1) ๋ช…์‹œ์  ์ธํ…ํŠธ: ํด๋ž˜์Šค ํƒ€์ž… ๋ ˆํผ๋Ÿฐ์Šค ์ •๋ณด๋ฅผ ํ™œ์šฉํ•œ ์ธํ…ํŠธ=> ์œ„ ์ฝ”๋“œ์—์„œ

    DetailActivity::class.java

2) ์•”์‹œ์  ์ธํ…ํŠธ: ์ธํ…ํŠธ ํ•„ํ„ฐ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•œ ์ธํ…ํŠธ=> ์™ธ๋ถ€ ์•ฑ์˜ ์ปดํฌ๋„ŒํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ...

- Intent-Filter

< activity > Activity์˜ ๊ฐ ํ•˜์œ„ ํด๋ž˜์Šค. ์ด ํƒœ๊ทธ ๋‚ด์— intent filter๊ฐ€ ์กด์žฌํ•˜๊ณ , < intent-filter >ํƒœ๊ทธ ์•ˆ์—๋Š” < action >๊ณผ < category >๊ฐ€ ์กด์žฌํ•˜์—ฌ ์ฒซ ํ™”๋ฉด์„ ๊ฒฐ์ •ํ•œ๋‹ค.

โญ• Intent๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Activity ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ด ์˜ˆ์—์„œย ย ์š”์†Œ๋Š” ์ด ํ™œ๋™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.ย ํ™œ๋™์ด ์‹œ์ž‘ ์š”์ฒญ์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋„๋กย ย ์š”์†Œ๋ฅผย ์„ ์–ธ ํ•ฉ๋‹ˆ๋‹ค.ย DEFAULT<ย data>ย ์š”์†Œ๋Š” ์ด ํ™œ๋™์ด ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

```
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>
```

```
val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)
```

- Fragment

โญ• Fragment์˜ ์ •์˜
-ํ…์ŠคํŠธ๋ทฐ๋‚˜ ๋ฒ„ํŠผ์ฒ˜๋Ÿผ ์•กํ‹ฐ๋น„ํ‹ฐ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ทฐ
-์ด ์ž์ฒด๋งŒ์œผ๋กœ๋Š” ํ™”๋ฉด์— ์•„๋ฌด๊ฒƒ๋„ ์ถœ๋ ฅ๋˜์ง€ ์•Š๋Š”๋‹ค!
-์•กํ‹ฐ๋น„ํ‹ฐ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค.
โ‡’ ์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ ์ž‘์„ฑํ•˜๋Š” ๋ชจ๋“  ์ฝ”๋“œ๋Š” ํ”„๋ž˜๊ทธ๋จผํ„ฐ์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค!

โญ• Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ํƒœ๋ธ”๋ฆฟ์ฒ˜๋Ÿผ ํ™”๋ฉด์ด ๋„“์€ ๊ธฐ๊ธฐ์—์„œ ๋™์ž‘ํ•˜๋Š” ์•ฑ์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณต๋˜์—ˆ๋‹ค.
    ํ•œ ํ™”๋ฉด์€ ํ•˜๋‚˜์˜ ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค์—์„œ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ, ํ™”๋ฉด์ด ํฌ๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ ํด๋ž˜์Šค์— ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
    ํ•œ ํ™”๋ฉด์— ๋ชฉ๋ก๊ณผ ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ, ๋‘ ํด๋ž˜์Šค๊ฐ€ ์•กํ‹ฐ๋น„ํ‹ฐ ํ™”๋ฉด์— ์ถœ๋ ฅ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋ฅผ ๋ทฐ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋ทฐ ํด๋ž˜์Šค๋Š” ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ, ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•กํ‹ฐ๋น„ํ‹ฐ์— ์ž‘์„ฑ๋ค ๋‚ด์šฉ์„ ๋‹ด๋Š”๋‹ค.
    โญ• ์ƒˆ Fragment๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•
    -androidx.fragment ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณตํ•œ๋‹ค.
dependencies{
  (...)
  implementation 'androidx.fragment: fragment-ktx:1.3.6'
}
  //ktx: kotlin์œผ๋กœ ์ž‘์„ฑํ–ˆ์Œ! ์ด๊ฒŒ ์—†์œผ๋ฉด ์ž๋ฐ”!

โญ• Fragment๋ฅผ ๋„์šฐ๋Š” ๋ฐฉ๋ฒ•

  • ์•กํ‹ฐ๋น„ํ‹ฐ์˜ ๋ ˆ์ด์•„์›ƒ xml ํŒŒ์ผ์— ํ”„๋ž˜๊ทธ๋จผํŠธ๊ฐ€ ์ถœ๋ ฅ๋  ๋ทฐ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".fragment.MainFragment">

- Bundle์ด๋ž€?

โญ• Bundle์˜ ์ •์˜

  • ์ƒํƒœ/๊ฐ’์„ ์ „๋‹ฌํ•˜๋Š” ์ˆ˜๋‹จ์ธ ๊ฐ์ฒด
  • Map ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ์Œ

โญ• Intent์™€ Bundle์˜ ๊ฒฐํ•ฉ ๋ฐฉ๋ฒ•

val intent = Intent()

val bundle =Bundle()
bundle.putString("key","value")
intent.putExtra("bundle",bundle)

โ‡’ Bundle์€ ๋‚ด๋ถ€์ ์œผ๋กœ Map์„ ํ™œ์šฉํ•ด ๋ฐ”๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.

- FragmentManager๋ž€?

โญ• FragmentManager์˜ ์ •์˜
-ํ”„๋ž˜๊ทธ๋จผํŠธ๋ฅผ ๋”ํ•˜๊ณ , ์‚ญ์ œํ•˜๊ณ , ๊ต์ฒดํ•˜๊ณ , ๋ฐฑ์Šคํƒ์— ๋”ํ•˜๋Š” ํ™œ๋™ ๋“ฑ์„ ์ฑ…์ž„์ง€๋Š” class

โญ• SupportFragmentManager vs. FramgentManager

-์•กํ‹ฐ๋น„ํ‹ฐ์—์„œ FragmentManager์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ getSpportFragmentManager ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

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

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