最後更新日期:2023 年 03 月 24 日

View model 的用途

1、將商業邏輯從 Activity 或 Fragment 中獨立出來,避免 view 過大,影響程式可讀性及可維護性。

2、view model 可以在 configuration changes 中存活,可以在畫面切換時保存變數。

依賴的函式庫

dependencies {
        ...
        def lifecycle_version = "2.5.1"
        // LiveData
        implementaion "android.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
        // LiveData
        implementaion "android.lifecycle:lifecycle-lifedata-ktx:$lifecycle_version"
}

建立 View Model

class MainViewModel : ViewModel() {
		...
}

在 Activity 或 Fragment 中初始化 View Model

class MainActivity : AppCompatActivity(){

		private lateinit var viewModel: MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
				...
        viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
		}
		...
}

快速初始化的方法 – viewModels()

依賴

// 只能在 activity 中使用 viewModels()
// implementation "androidx.activity:activity-ktx:1.6.1"

// activity 與 fragment 都可使用 viewModels()
implementation "androidx.fragment:fragment-ktx:1.5.5"

程式代碼

...
import androidx.activity.viewModels

class MainActivity : AppCompatActivity() {

    private val viewModel: MainViewModel by viewModels()
    
		override fun onCreate(savedInstanceState: Bundle?) {
				...
		}
		...
}

參考資料

developers Guide: ViewModel overview 

Last modified: 2023 年 3 月 24 日

Author

Comments

Write a Reply or Comment

Your email address will not be published.