iT邦幫忙

2021 iThome 鐵人賽

DAY 14
0
Mobile Development

Kotlin Android 30天,從 0 到 ML (Machine Learning)系列 第 14

Kotlin Android 第14天,從 0 到 ML - Fragments 和 Fragments 生命週期

前言:

   Activity 上如果有很多的功能(例如系統的設定...),畫面的就會變的很長,或是轉跳好幾個Activity,要回上一頁也是一個一個的轉跳回去,有點麻煩,這是可以把功能分到幾個 Fragments 來重新設計頁面,讓app的介面簡單好用許多。

大綱 :

**Fragments **

Fragments 的UI 設計基本 和 Activity 差不多,Fragments有自己的生命週期,但不行跟Activity一樣獨立存生, 必需有Activity 或 另一個 Fragments 相依管理。 

step1 匯入元件庫

build.gradle (APP)	
 ….
dependencies {
     ...
   implementation "androidx.fragment:fragment-ktx:1.3.6"
     ...
 }

step 2 建立Fragments

class KotlinFragment : Fragment(R.layout.fragment_kotlin)
class AndroidFragment : Fragment(R.layout.fragment_kotlin)

step 3 在activity 的 xml 和 activity 加入 Fragments 物件
xml

<androidx.fragment.app.FragmentContainerView
     android:id="@+id/fragment_container_view"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     />

activity

override fun onCreate(savedInstanceState: Bundle?) {
     super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_day14)
    if(savedInstanceState == null) {
        supportFragmentManager.commit {
            setReorderingAllowed(true)
            add<KotlinFragment>(R.id.fragment_container_view)
  ...
        }
    }
  }

Step 4 使用 FragmentManager 來切換 Fragment

在activity 的按鍵事件內宣告

//使用supportFragmentManager 的commit
supportFragmentManager.commit {
        //把現有的fragment id 用新的fragmet 換掉
        replace<AndroidFragment>(R.id.fragment_container_view)
        setReorderingAllowed(true)
        addToBackStack(null) // name can be null
    }
    

執行結果:
https://ithelp.ithome.com.tw/upload/images/20210919/20121643amoGUKEHYR.png
https://ithelp.ithome.com.tw/upload/images/20210919/20121643DUHeVNQ6j0.png

生命週期的結果:
https://ithelp.ithome.com.tw/upload/images/20210919/201216437i2bRN9mbh.png
https://ithelp.ithome.com.tw/upload/images/20210919/20121643SEmcsEBE5O.png

參考

https://developer.android.com/guide/fragments/


上一篇
Kotlin Android 第13天,從 0 到 ML - Activity 和 Activity 生命週期
下一篇
Kotlin Android 第15天,從 0 到 ML - Android Jetpack
系列文
Kotlin Android 30天,從 0 到 ML (Machine Learning)30

尚未有邦友留言

立即登入留言