Android framework 管理UI(如 Activity 和 Fragment)的生命週期,如銷毀或重新創建,不會受到使用者操作或手機事件影響。
使用需先 import
dependencies {
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"
}
ViewModel 存在生命週期是在 ViewModel 透過 ViewModelProvider 建立開始齊生命。 ViewModel 會一直留在內存,直到其存在範圍的 Lifecycle 銷毀,如 Activity,是在 Activity 完成時 ,而 Fragment,是在 Fragment 離開時。
ViewModel 的生命周期
動手做看看
首先建立ViewModel,view 顯示標題 與子項募資酪
class TodoViewModel: ViewModel() {
var todos = listOf<Todo>(Todo.Title("記事本"))
private var count = 0
fun addNewTodo() {
val todo = Todo.Item("note $count", false)
todos = todos.toMutableList().apply {
add(todo)
}
count ++
}
}
在 要使用的 MainActivity,使用ViewModelProvider
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
val adapter = TodoAdapter()
recyclerView.adapter = adapter
........
val todoViewModel = ViewModelProvider(this).get<TodoViewModel>()
adapter.submitList(todoViewModel.todos)
//點擊新增項目
buttonAdd.setOnClickListener {
todoViewModel.addNewTodo()
adapter.submitList(todoViewModel.todos)
}
}
}
reference:https://developer.android.com/topic/libraries/architecture/viewmodel
reference:https://developer.android.com/reference/androidx/lifecycle/ViewModelProvider
reference:https://www.notion.so/LiveData-and-viewModel-9-2-bfb163f6dbfc4a71b2388538514de089