![](/img/trans.png)
[英]java.lang.RuntimeException: Cannot create an instance of ViewModel class
[英]java.lang.RuntimeException: Cannot create an instance of class ViewModel, when android recreates Activity and Fragment
案例是Activity-Fragment
Recreate:我正在activity
級別從活動context
創建ViewModel
,並嘗試使用ViewModelProvider
.of() 在Fragment
級別訪問初始化的ViewModel
。
下面的代碼在快樂的情況下工作; 但是當重新創建活動(更改系統語言或權限)時,相同的代碼不起作用,並且片段無法訪問活動創建的視圖模型。
ViewModel 是參數化的,只有一個主要構造函數,並使用 ViewModelProvider.Factory 進行初始化
class MessageViewModel(var message: MutableLiveData<String>): ViewModel() { ... }
val viewModel = ViewModelProviders.of(this, MessageVMFactory())
.get(MessageViewModel::class.java)
val viewModel = ViewModelProviders.of(activity)
.get(MessageViewModel::class.java)
java.lang.RuntimeException:無法啟動活動 ComponentInfo{com.krp.android.viewmodeldemo/com.krp.android.viewmodeldemo.MainActivity}:java.lang.RuntimeException:無法創建類 com.krp.android.viewmodeldemo 的實例.utility.MessageViewModel
如果您已通過 Factory 初始化 ViewModel,則必須通過 Factory 訪問它,而不管任何上下文。 當系統重新創建活動或片段時,似乎是 ViewModel 問題。
它在 Fragment 上工作正常,當
val viewModel = ViewModelProviders.of(activity, MessageVMFactory())
.get(MessageViewModel::class.java)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.