ViewModelの整理
概要
UI 컨트롤러 로직에서 뷰 데이터 소유권을 분리하는 방법이 훨씬 쉽고 효율적이다.
インプリメンテーション
ViewModelオブジェクトは、構成変更中に自動的にアーカイブされるため、次のビューですぐに使用できます.たとえば、ユーザー・リストを確認し、次のサンプル・コードに示すように、ビューではなくView Modelに責任を割り当てます.
class MyViewModel : ViewModel() {
private val users: MutableLiveData<List<User>> by lazy {
MutableLiveData<List<User>>().also {
loadUsers()
}
}
fun getUsers(): LiveData<List<User>> {
return users
}
private fun loadUsers() {
// Do an asynchronous operation to fetch users.
}
}
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
// Create a ViewModel the first time the system calls an activity's onCreate() method.
// Re-created activities receive the same MyViewModel instance created by the first activity.
// Use the 'by viewModels()' Kotlin property delegate
// from the activity-ktx artifact
val model: MyViewModel by viewModels()
model.getUsers().observe(this, Observer<List<User>>{ users ->
// update UI
})
}
}
ViewModelオブジェクトは、ビューまたはLifecycleOwnerの特定のインスタンスよりも永続的に設計されています.これらの設計により、ビューとライフサイクルオブジェクトを理解せずに、View Modelのテストを作成しやすくなります.ViewModelオブジェクトにはLifecycleObserver(LiveDataオブジェクトなど)を含めることができます.ただし,ViewModelオブジェクトはLiveDataオブジェクトのように観測可能なライフサイクル変更を観察すべきではない.たとえば、システム・サービスを検索するためにアプリケーション・コンテキストが必要な場合、ViewModelはAndroid View Modelクラスを展開し、ジェネレータにアプリケーションを受信するジェネレータを含めることができます(アプリケーション・クラスはContextを展開します).
ライフサイクル
詳細をViewModelで置き換え、coutineを使用...
Reference
この問題について(ViewModelの整理), 我々は、より多くの情報をここで見つけました https://velog.io/@arakene/ViewModel-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol